0

プログラムを実行するために切り替える 2 つのフレーム (A と B) を使用しています。以前

while Conditions:
    self.frameA.wait_window() 

次に、frameA が終了したら:

self.frameA.destroy()
self.frameB = FrameB(self)
self.frameB.wait_window()
#After I'm finished with B...
#Function that takes info from frames A and B to make the program run
self.frameB.destroy()
self.frameA = FrameA(self)

プログラムの期間中、前後に交互に行います。しかし、破棄して再初期化する方がうまくいくのではないかと考え始めました。ここで、grid_forget() を使用して、2 番目の初期化のように機能するフレーム用の関数を作成しました。私の問題は、フレームを破棄していないため、wait_window が壊れず、無限ループが発生することです。2 つのフレームをマージするというアイデアをいじりましたが、それでは wait_window の問題は解決しません。基本的に、アプリケーションにフレームからの入力を待機させる方法はありますか、それとも元の方法に戻るのが最善の解決策ですか?

while firstConditions():
    while secondConditions():
        self.play()
    #Other code after secondConditions is false

def play(self):
    w = messagebox.askyesno(message='Make changes?', parent=self)
    if w:
        #Deals with making changes
    self.frameA.wait_window()

次に、frameA のボタンにより、frameB が作成されます。

def makeFrameB(self):
    self.frameA.grid_forget()
    self.frameB.newInit()
    self.frameB.grid(row=3, column=0, columnspan=3)
    self.frameB.wait_window()

wait_window を使用する理由は、そうしないと、メッセージボックスが何度も表示される無限ループが発生するからです。

4

1 に答える 1

0

問題を引き起こしたコードを編集した後は、wait_window を使用して問題を解決する必要はありません。

于 2013-07-11T15:01:48.550 に答える