2

我已经编写了一个 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”。似乎线程没有启动,甚至等待完成事件,或者它已启动但没有到达启动命令......我只是不明白。通常 MyFrame 应该出现,当我关闭它时,会设置 completeEvent 并且 mainFrame 继续。我也尝试过 wx.CallAfter,但这也无济于事......有人可以告诉我如何让大型机等到另一个框架关闭而不使其成为对话框或使用 makemodal 或类似的东西吗?

4

1 回答 1

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):
    ...
于 2013-06-06T17:04:35.780 回答