2

Pythonプログラミングは私のものではないように感じています....

ボタンコールバックを使用して別のウィンドウを開くtkinter GUIを作成しました(他の検索では、このウィンドウはトップレベルウィンドウである必要があります)。ボタンを押すたびに、別の同一のウィンドウが開きます(私が知る限り)ウィンドウ。

質問: ウィンドウ (ボタンで開く) が既に存在するかどうかをテストして、重複が生成されないようにするにはどうすればよいですか?

注:私は(まだ)OOPプログラマーではないので、可能であればそのパラダイムを避けてください...

よろしく、

ビル W.

4

2 に答える 2

5

私は(まだ)OOPプログラマーではないので、可能であればそのパラダイムを避けてください...

遅かれ早かれ、Python でプログラミングを成功させたいのであれば、オブジェクト指向プログラミングを理解する必要があります。代替手段 (どこにでもあるグローバル変数と関数) は、間違いなく良いアプローチではありません。Tkinter でも、それぞれのメソッドを持つクラスがたくさんあるので、目的に応じて必要なようです。

質問に戻ると、トップレベル ウィンドウをすべてのアプリケーションをラップするクラスの属性として設定し、この属性が None の場合にのみ新しいウィンドウを開くことが解決策になる可能性があります。ウィンドウを閉じるときにこの属性を None に設定するには、protocolメソッドを使用してコールバックを設定します。

これは、それがどのように機能するかを確認できる小さな実例です。

import Tkinter as tk

class App(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.button = tk.Button(self, text="Open a new window", command=self.openwindow)
        self.button.pack()
        self.toplevel = None
    def openwindow(self):
        if self.toplevel is None:
            self.toplevel = tk.Toplevel(self)
            self.toplevel.protocol('WM_DELETE_WINDOW', self.removewindow)
    def removewindow(self):
        self.toplevel.destroy()
        self.toplevel = None

app = App()
app.mainloop()
于 2013-06-15T20:57:11.753 に答える