<p>如acw1668的注释所述<code>GameInfoLabel</code>是<code>GameInfo()</code>方法的局部。这意味着一旦此方法完成运行,其中声明的任何内容都将停止存在</p>
<p>通常的解决方案是向函数传递/返回变量以获得结果,例如,游戏信息可以返回标签,但是,由于您希望在事件发生时自动调用这些函数,例如,按下按钮,这并不容易</p>
<p>我相信解决问题的最简单方法是全局声明<code>GameInfoLabel</code>变量(在全局范围内),这并不总是最佳编码实践,但我不确定tkinter是否能够将变量参数传递给事件处理程序,这可能会很复杂</p>
<p>正如acw1668所提到的,您可以在初始化<code>Label(...)</code>返回的新标签上立即调用.pack()。然后包装不会返回标签,因此我们会单独返回</p>
<p>这应该行得通,仔细阅读一下</p>
<pre><code>from tkinter import *
root = Tk()
root.title("Game Menu")
root.geometry("1920x1080")
root.resizable(True, True)
# Declare any global UI Components
GameInfoLabel = None # Dont set a Label yet
def QuitGameInfo():
GameInfoLabel.destroy()
BackInfoButton['state'] = NORMAL
def GameInfo():
RulesNotepad = open("GameInfo.txt",'r')
Rules = RulesNotepad.read()
GameInfoLabel = Label(root, text = Rules, fg = "blue", bg = "red", height = "14", width = "140")
GameInfoLabel.pack()
BackInfoButton = Button(root, text = "Back", command = QuitGameInfo).pack()
RulesNotepad.close()
button3 = Button(root, text = "Info", command = GameInfo, width = "20", height = "3")
button3.pack()
root.mainloop()
</code></pre>