Search code examples
pythonpython-3.xwindowsdebuggingtkinter

I can't insert background image, make full screen mode and close previous windows


I am writing a program that will work according to the algorithm (that is, when you click on some buttons can appear another window or the final window with the result, and from Toplevel(opennewwindow(1)) when you click on the buttons should appear another window) I wrote the basic code of this program, but I failed to insert a background image on all windows, as well as to make full screen mode for all windows and close previous windows. Here is the code (python version - 3.10)

from tkinter import * #Выводит библиотеку окон
from tkinter.ttk import * #Выводит библиотеку дополнительных окон

master = Tk()#Названии опции
master.geometry("1920x1080")#Размер окна
master.title("Окно")#Названия окна\

bg=PhotoImage("C:/Users/User/AppData/Local/Programs/Python/Python310/draw.jpg") 


def openNewWindow():#Опция нового окна
        newWindow = Toplevel(master)##Названии опции нового окна
        newWindow.title("Второе окно")#Названия окна нового окна
        newWindow.geometry('1920x1080')#Размер окна нового окна
        Label(newWindow, #Начало титульного вопроса нового окна
            text ="Вопрос №2").pack()# Конец  титульного вопроса нового окна

        btn = Button(newWindow,#Начало кнопки нового окна
                         text ="Да",#середина кнопки нового окна
                         command = openNewWindow)#Конец кнопки нового окна
        btn.pack(pady = 10)#Оформление кнопки нового окна
        btn = Button(newWindow,##Начало второй кнопки нового окна
                         text ="нет",#середина второй кнопки нового окна
                         command = openNewWindow1)#Конец второй кнопки нового окна
        btn.pack(pady = 10)#Оформление второй кнопки нового окна
        master.withdraw()
        openNewWindow1.withdraw()

def openNewWindow1():##Опция нового dd второго окна
        newWindow1 = Toplevel(master)###Названии опции нового окна
        newWindow1.title("Третье окно")##Названия окна нового окна
        newWindow1.geometry('1920x1080')##Размер окна нового окна
        Label(newWindow1, ##Начало титульного вопроса нового окна
            text ="Вопрос №3").pack()## Конец  титульного вопроса нового окна

        btn = Button(newWindow1,##Начало кнопки нового окна
                         text ="Да",##середина кнопки нового окна
                         command = openNewWindow)##середина кнопки нового окна#Конец кнопки нового окна
        btn.pack(pady = 10)##Оформление кнопки нового окна
        btn = Button(newWindow1,###Начало второй кнопки нового окна
                         text ="нет",##середина второй кнопки нового окна
                         command = openNewWindow2)##Конец второй кнопки нового окна
        btn.pack(pady = 10)##Оформление второй кнопки нового окна
        master.withdraw()
        openNewWindow.withdraw()

def openNewWindow2():##Опция нового dd третьего окна
        newWindow2 = Toplevel(master)###Названии опции нового третьего  окна
        newWindow2.title("Третье окно")##Названия окна нового третьего  окна
        newWindow2.geometry('1920x1080')##Размер окна нового третьего  окна
        Label(newWindow2, ##Начало титульного вопроса нового третьего  окна
            text ="Вопрос №4").pack()## Конец  титульного вопроса нового третьего  окна

        btn = Button(newWindow2,##Начало кнопки нового третьего  окна
                         text ="Да",##середина кнопки нового третьего  окна
                         command = openNewWindow)##середина кнопки третьего  нового окна#Конец кнопки нового третьего  окна
        btn.pack(pady = 10)##Оформление кнопки нового третьего  окна
        btn = Button(newWindow2,###Начало второй кнопки нового третьего  окна
                         text ="нет",##середина второй кнопки нового третьего  окна
                         command = openNewWindow1)##Конец второй кнопки нового третьего  окна
        btn.pack(pady = 10)##Оформление второй кнопки нового третьего   окна
        master.withdraw()
        openNewWindow.withdraw()




background = PhotoImage()
label = Label(master, image=bg, #Вопрос основного окна(начало)
              text ="Вопрос №1")##Вопрос основного окна(середина)
label.place(x=0, y=0)
label.pack(pady = 10)##Оформление основного окна(оформление)


btn = Button(master, ##Кнопка основного окна(начало)
                text ="Да", ##Кнопка основного окна(середина)
                command = openNewWindow)##Кнопка основного окна(середина)
btn.pack(pady = 10)##Оформление основного окна(начало)

btn = Button(master, ##Кнопка основного окна(начало)
                text ="Нет", ##Кнопка основного окна(середина)
                command = openNewWindow1)##Кнопка основного окна(середина)
btn.pack(pady = 10)##Оформление основного окна(начало)




btn.pack(pady = 10)#
mainloop()#Конец цикла и запуск команды

When I click on the buttons in the program, I get this error, and the text disappears in the first window, and the background image does not appear:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:/Users/User/AppData/Local/Programs/Python/Python310/sffsfsf.py", line 27, in openNewWindow
    openNewWindow1.withdraw()
AttributeError: 'function' object has no attribute 'withdraw'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:/Users/User/AppData/Local/Programs/Python/Python310/sffsfsf.py", line 27, in openNewWindow
    openNewWindow1.withdraw()
AttributeError: 'function' object has no attribute 'withdraw'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:/Users/User/AppData/Local/Programs/Python/Python310/sffsfsf.py", line 45, in openNewWindow1
    openNewWindow.withdraw()
AttributeError: 'function' object has no attribute 'withdraw'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:/Users/User/AppData/Local/Programs/Python/Python310/sffsfsf.py", line 63, in openNewWindow2
    openNewWindow.withdraw()
AttributeError: 'function' object has no attribute 'withdraw'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:/Users/User/AppData/Local/Programs/Python/Python310/sffsfsf.py", line 45, in openNewWindow1
    openNewWindow.withdraw()
AttributeError: 'function' object has no attribute 'withdraw'

Solution

  • I can't insert background image, make full screen mode

    but I failed to insert a background image on all windows,

    as well as to make full screen mode for all windows and close previous windows

    The problem can be fixed.

    Why don't you listen to @acw1668?

    Why are you duplicating functions?

    I added a variable counter to count the number of windows.

    Remove background = PhotoImage() You already have bg=PhotoImage

    You are missing keyword for file=. Should be file=draw.jpg. When using Tkinter.

    On the Label widget, I add image=bg, f-string, and compound='bottom' in the openNewWindow() function.

    Write one function for both Him and Her.

    Do not duplicate btn for Him and Her. Use btn for Him and btn1 for Her.

    Lastly, remove this btn.pack(pady = 10). You already have.

    Snippet re-wrote to reduce coding:

    from tkinter import * #Выводит библиотеку окон
    from tkinter.ttk import * #Выводит библиотеку дополнительных окон
    
    master = Tk()#Названии опции
    master.geometry("320x420")#Размер окна
    master.title("Окно")#Названия окна\
    
    bg=PhotoImage(file="p2.png") 
    
    counter = 0
    def openNewWindow():#Опция нового окна
            global counter
            newWindow = Toplevel(master)##Названии опции нового окна
            newWindow.title("Второе окно")#Названия окна нового окна
            newWindow.geometry('320x420')#Размер окна нового окна
            counter += 1
            Label(newWindow, image=bg,
                text =f"Вопрос {counter}", compound='bottom').pack()# Конец  титульного вопроса нового окна
    
            btn = Button(newWindow,#Начало кнопки нового окна
                             text ="Да",#середина кнопки нового окна
                             command = openNewWindow)#Конец кнопки нового окна
            btn.pack(pady = 10)#Оформление кнопки нового окна
            btn = Button(newWindow,##Начало второй кнопки нового окна
                             text ="нет",#середина второй кнопки нового окна
                             command = openNewWindow)#Конец второй кнопки нового окна
            btn.pack(pady = 10)#Оформление второй кнопки нового окна
            master.withdraw()
            #openNewWindow1.withdraw()
    
     
    label = Label(master, image=bg, #Вопрос основного окна(начало)
                  text ="Вопрос №1")##Вопрос основного окна(середина)
    label.place(x=0, y=0)
    label.pack(pady = 10)##Оформление основного окна(оформление)
    
    
    btn = Button(master, ##Кнопка основного окна(начало)
                    text ="Да", ##Кнопка основного окна(середина)
                    command = openNewWindow)##Кнопка основного окна(середина)
    btn.pack(pady = 10)##Оформление основного окна(начало)
    
    btn1 = Button(master, ##Кнопка основного окна(начало)
                    text ="Нет", ##Кнопка основного окна(середина)
                    command = openNewWindow)##Кнопка основного окна(середина)
    btn1.pack(pady = 10)##Оформление основного окна(начало)
    

    Screenshot on main window:

    enter image description here

    Screenshot on new window for him or her:

    enter image description here