我正在编写一个根据该算法工作的程序(也就是说,当您单击某些按钮时,会出现另一个窗口或带有结果的最终窗口,并且当您单击按钮时应该从 Toplevel(opennewwindow(1))出现另一个窗口)我编写了这个程序的基本代码,但我未能在所有窗口上插入背景图像,以及为所有窗口设置全屏模式并关闭以前的窗口。这是代码(python 版本 - 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()#Конец цикла и запуск команды
当我单击程序中的按钮时,出现此错误,文本在第一个窗口中消失,并且背景图像不出现:
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'
你的代码中有几个问题导致了错误和所需功能的缺失。以下是修正后的代码和解释:
from tkinter import *
from tkinter.ttk import *
def openNewWindow():
master.withdraw() # 隐藏主窗口
global newWindow # 声明newWindow为全局变量
newWindow = Toplevel(master)
newWindow.title("第二个窗口")
newWindow.geometry('1920x1080')
newWindow.attributes('-fullscreen', True) # 设置新窗口为全屏
# 添加背景图片
bg2 = PhotoImage(file="C:/Users/User/AppData/Local/Programs/Python/Python310/draw.jpg")
label2 = Label(newWindow, image=bg2)
label2.place(x=0, y=0, relwidth=1, relheight=1)
label2.image = bg2 # 保留对图片的引用
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)
def openNewWindow1():
master.withdraw() # 隐藏主窗口
global newWindow1 # 声明newWindow1为全局变量
newWindow1 = Toplevel(master)
newWindow1.title("Третье окно")
newWindow1.geometry('1920x1080')
newWindow1.attributes('-fullscreen', True) # 设置新窗口为全屏
# 添加背景图片
bg3 = PhotoImage(file="C:/Users/User/AppData/Local/Programs/Python/Python310/draw.jpg")
label3 = Label(newWindow1, image=bg3)
label3.place(x=0, y=0, relwidth=1, relheight=1)
label3.image = bg3 # 保留对图片的引用
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)
def openNewWindow2():
master.withdraw() # 隐藏主窗口
global newWindow2 # 声明newWindow2为全局变量
newWindow2 = Toplevel(master)
newWindow2.title("Третье окно")
newWindow2.geometry('1920x1080')
newWindow2.attributes('-fullscreen', True) # 设置新窗口为全屏
# 添加背景图片
bg4 = PhotoImage(file="C:/Users/User/AppData/Local/Programs/Python/Python310/draw.jpg")
label4 = Label(newWindow2, image=bg4)
label4.place(x=0, y=0, relwidth=1, relheight=1)
label4.image = bg4 # 保留对图片的引用
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 = Tk()
master.geometry("1920x1080")
master.title("Окно")
master.attributes('-fullscreen', True) # 设置主窗口为全屏
# 添加背景图片
bg = PhotoImage(file="C:/Users/User/AppData/Local/Programs/Python/Python310/draw.jpg")
label = Label(master, image=bg)
label.place(x=0, y=0, relwidth=1, relheight=1)
label.image = bg # 保留对图片的引用
label1 = Label(master, text="Вопрос №1")
label1.pack(pady=10)
btn = Button(master, text="Да", command=openNewWindow)
btn.pack(pady=10)
btn = Button(master, text="Нет", command=openNewWindow1)
btn.pack(pady=10)
mainloop()
解释:
-
withdraw()
的使用: 错误信息AttributeError: 'function' object has no attribute 'withdraw'
是因为你试图在函数对象上调用withdraw()
方法,而它应该被调用在窗口对象上。 因此,在每个openNewWindow
函数中,我们首先使用master.withdraw()
隐藏主窗口,而不是试图隐藏函数本身。 -
全局变量: 为了在函数内部正确地隐藏和显示窗口,你需要将
newWindow
,newWindow1
和newWindow2
声明为全局变量。 这可以通过在函数内部使用global newWindow
,global newWindow1
和global newWindow2
来实现。 -
背景图片:
- 你需要在每个窗口创建函数中加载背景图片,而不是只在主窗口中加载。
-
使用
label.place(x=0, y=0, relwidth=1, relheight=1)
将图片铺满整个窗口。 -
使用
label.image = bg
(以及其他窗口的类似代码) 来保留对图片对象的引用,防止图片被垃圾回收。
-
全屏模式:
-
使用
window.attributes('-fullscreen', True)
来设置窗口为全屏模式,其中window
是你要设置的窗口对象 (例如master
,newWindow
等).
-
使用
通过这些修改,你的代码应该可以正常工作,并在每个窗口显示背景图片,并能够正确地切换和关闭窗口。
标签:python,python-3.x,windows,debugging,tkinter From: 78810686