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するだけself.topです。

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