プログラムを実行するために切り替える 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 を使用する理由は、そうしないと、メッセージボックスが何度も表示される無限ループが発生するからです。