2013-07-06 51 views
0

我使用2个框架(A和B),我可以在两个框架之间进行切换,以使程序运行。 此前tkinter框架等待难题

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()为像第二个init那样工作的框架创建了一个函数。我现在的问题是,因为我没有破坏帧,所以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的理由是,如果我不这样做,我会得到与消息框出现在一个无限循环并结束。

+0

'wait_window'不是用来像你使用它一样 - 它几乎只用于等待模态对话框。你为什么认为你需要调用'wait_window'?你能否给我们展示一个完整的工作示例,说明你在几行代码中要做什么? –

回答

0

编辑提出问题的代码后,我不需要使用wait_window来解决我的问题。

+3

请解释你改变了什么。除非接受的答案显示如何解决问题,否则这个问题不可能在将来帮助任何人。 – tripleee

+0

我接受了Bryan的建议,浏览了整个程序并删除了每个“wait_window”实例来解决我的问题。 –