1

我正在尝试使用该withdraw方法,但它不起作用。这是我的代码:

from tkinter import *

class GameBoard(Frame):
  def __init__(self):
    top = Toplevel()
    Frame.__init__(self)
    self.master.title("test")
    self.grid()
    #button frame
    self.__buttonPane = Frame(self)
    self.__buttonPane.grid()
    #buttons
    self.__buttonA1 = Button(self.__buttonPane,text = "A1",command = self._hide)
    self.__buttonA1.grid()

  def _hide(self):
    top.withdraw()


def main():
  GameBoard().mainloop()

main()

我将如何制作我的命令以隐藏顶层创建的窗口?我希望能够在主程序需要之前隐藏它。

4

1 回答 1

1

当您运行代码时,您会收到一条错误消息。该错误消息告诉您什么?它应该有线索来了解问题所在。

错误是“NameError:未定义全局名称'top'”。所以你应该问自己的问题是“为什么程序认为‘top’是全局的,为什么没有定义?”。

查看您的代码,我可以看到您正在使用一个名为“top”的局部变量来存储对窗口的引用。您需要将其声明为全局或将其声明为类的属性。后者是正确的方法。

为此,只需更改top代码中self.top的任何位置。

self.top = Toplevel()
...
self.top.withdraw()
于 2012-12-02T13:18:42.567 回答