等待threading.Event直到Frame关闭

时间:2013-06-06 16:40:13

标签: python-2.7 wxpython

我已经编写了一个GUI,并且在某个时刻打开一个框架作为主机的子框架,打开另一个框架的功能只应在此框架关闭时继续。

我只是不明白为什么这不起作用:

def ShowFrame(completeEvent):
    frame = MyFrame(self, completeEvent, ...)
    frame.Show()

self.completeEvent = threading.Event()
thread = threading.Thread(target=ShowFrame, args=(self.completeEvent,))
thread.start()
self.completeEvent.wait()

运行此示例会导致冻结的主机,并且“MyFrame”永远不会出现。 似乎线程没有启动甚至等待completeEvent或者它已经启动但没有达到启动命令......我只是不明白。 通常会显示MyFrame,当我关闭它时,将设置completeEvent并继续mainFrame。我也尝试了wx.CallAfter,但这也无济于事...... 有人可以告诉我如何使大型机等到另一帧关闭而不使其成为对话框或使用makemodal或类似的东西吗?

1 个答案:

答案 0 :(得分:0)

您无法在另一个线程上执行GUI功能。

我会这样做:

class ParentFrame(wx.Frame):
    ...
    def show_child(self):
        frame = ChildFrame(self)
        frame.Bind(wx.EVT_CLOSE, self.on_child_closed)
        frame.Show()
    def on_child_closed(self, event):
        event.Skip()
        # do processing needed after child closes

class ChildFrame(wx.Frame):
    ...