<p>你准备好了吗</p>
<pre><code>window2 = None
window1 = None
</code></pre>
<p>作为全局变量,然后定义<code>button2</code>的命令函数</p>
<pre><code>lambda: newScreen(window2, window1)
</code></pre>
<p>它使用值window2和window1调用<code>newScreen</code>,这两个值都是<code>None</code>,因此出现了错误。这里的基本问题是<code>setWindow</code>函数:</p>
<pre><code>def setWindow(windowEnter):
global window
window = windowEnter
window = Tk()
window.attributes("-fullscreen", True)
</code></pre>
<p>这和你使用它的方式不一样。调用<code>setWindow(window1)</code>时,传递<code>window1</code>的<strong>值</strong>,在全局范围内看不到函数对变量所做的操作。一个简单的例子是:</p>
<pre><code>def increment(a):
a +=1
x = 1
print(x)
increment(x)
print(x)
</code></pre>
<p>它将打印1两次。你知道吗</p>
<p>为了达到你想要的,我建议你用字典来记录你的窗口。你知道吗</p>
<pre><code>from tkinter import *
def hello():
print("U pressed it lol")
global window1, window2
windows = {}
def setWindow(window_name):
windows[window_name] = Tk()
windows[window_name].attributes("-fullscreen", True)
def newScreen(newScreen_name, screenToDelete_name):
setWindow(newScreen_name)
print("New Window Created")
windows[screenToDelete_name].destroy()
del windows[screenToDelete_name] #delete invalid entry from dict
print("He ded lol")
setWindow("window1")
def setStuff():
button = Button(windows["window1"], text="hey", command=hello)
label = Label(windows["window1"], text="YoYoYo My dude")
button2 = Button(windows["window1"], text="Next Page", command = lambda: newScreen("window2", "window1"))
button.pack()
label.pack()
button2.pack()
setStuff()
</code></pre>
<p><strong>请注意:</strong>以前您的函数是<code>def newScreen(newScreen, screenToDelete)</code>,这是非常混乱/糟糕的样式,因为函数和它的第一个参数都使用相同的名称。无论如何,我还是修改了它,以强调它现在将字符串作为参数,但请记住这一点,以备将来使用。你知道吗</p>