这是一个简单的测试脚本,我试图写这将有助于我教自己关于tkinter。。。你知道吗
from tkinter import *
def hello():
print("U pressed it lol")
global window1, window2
window2 = None
window1 = None
def setWindow(windowEnter):
global window
window = windowEnter
window = Tk()
window.attributes("-fullscreen", True)
def newScreen(newScreen, screenToDelete):
setWindow(newScreen)
print("New Window Created")
screenToDelete.destroy()
print("He ded lol")
setWindow(window1)
def setStuff():
button = Button(window1, text="hey", command=hello)
label = Label(window1, text="YoYoYo My dude")
button2 = Button(window1, text="Next Page", command = lambda: newScreen(window2, window1))
button.pack()
label.pack()
button2.pack()
setStuff()
当我运行这个代码时,它返回一个错误?你知道吗
File "C:\Users\026341\Desktop\test.py", line 19, in newScreen
screenToDelete.destroy()
AttributeError: 'NoneType' object has no attribute 'destroy'
为什么不起作用&我该如何修复它?你知道吗
提前感谢:) (顺便说一句,我使用的是python3.6)
我现在无法测试它,但我发现了一个错误源:
这将创建一个不接受任何参数的lambda函数,因此window2和window1将为None,并且None没有destroy()方法,因此出现错误。相反,请尝试:
你准备好了吗
作为全局变量,然后定义
button2
的命令函数它使用值window2和window1调用
newScreen
,这两个值都是None
,因此出现了错误。这里的基本问题是setWindow
函数:这和你使用它的方式不一样。调用
setWindow(window1)
时,传递window1
的值,在全局范围内看不到函数对变量所做的操作。一个简单的例子是:它将打印1两次。你知道吗
为了达到你想要的,我建议你用字典来记录你的窗口。你知道吗
请注意:以前您的函数是
def newScreen(newScreen, screenToDelete)
,这是非常混乱/糟糕的样式,因为函数和它的第一个参数都使用相同的名称。无论如何,我还是修改了它,以强调它现在将字符串作为参数,但请记住这一点,以备将来使用。你知道吗相关问题 更多 >
编程相关推荐