Python 2.7 正在等待线程。事件,直到帧关闭
我已经编写了一个GUI,在某个点上,一个框架作为大型机的子框架打开,而打开另一个框架的功能只有在这个框架关闭时才能继续 我只是不明白为什么这不起作用:Python 2.7 正在等待线程。事件,直到帧关闭,python-2.7,wxpython,Python 2.7,Wxpython,我已经编写了一个GUI,在某个点上,一个框架作为大型机的子框架打开,而打开另一个框架的功能只有在这个框架关闭时才能继续 我只是不明白为什么这不起作用: def ShowFrame(completeEvent): frame = MyFrame(self, completeEvent, ...) frame.Show() self.completeEvent = threading.Event() thread = threading.Thread(target=ShowFram
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,或者线程已经启动,但没有到达start命令。。。我就是不明白。
通常情况下,MyFrame应该出现,当我关闭它时,completeEvent被设置,大型机继续运行。我也试过wx.CallAfter,但也没用。。。
有人能告诉我如何让大型机等待另一个框架关闭,而不使其成为对话框或使用MakeModel或类似的东西吗?您不能在另一个线程上执行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):
...
当然,这是可能的。但必须有可能在某个点停止某个函数,并在发生其他事情后继续它。如果这不起作用,线程事件是什么?我“只”需要工作两个帧-在这种情况下-平行。。。我认为thread.thread正是我需要的
showmodel
和wx。如果您不希望用户在使用子对话框时与父框架交互,则对话框
是实现这一点的一般方法。你到底想在这里做什么?对话框是没有选择的,因为框架非常复杂,并且是从其他框架类派生的。我试图做的是:在一个框架中启动一个函数,在此过程中,函数检查容器类对象中是否有太多的元素。如果是这样,暂停函数并启动另一个帧以选择其中一些元素,然后使用所选元素而不是所有元素恢复函数。。。类似于多选项或单选项对话框,但带有框架。