如何实现withdraw()?

时间:2012-12-02 03:58:44

标签: python tkinter

我正在尝试使用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()

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

1 个答案:

答案 0 :(得分:1)

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

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

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

要执行此操作,只需在代码中的任何位置将top更改为self.top即可。

self.top = Toplevel()
...
self.top.withdraw()