wxPython中相当于Application.DoEvents()的是什么?
在wxPython中有没有类似于Application.DoEvents()的东西?
我正在创建一个表单,然后进行一个比较慢的输入输出操作,这时候表单只部分显示出来,等这个操作完成后才会完全显示。我希望在输入输出操作开始之前,表单能完全显示出来。
我试过用 self.Refresh()
,但是没有效果。
1 个回答
1
其实,做输入输出操作时,最好是用一个单独的线程来处理,然后用 wx.CallAfter
来更新界面。
我通常会用这样的方式:
def start_work(self):
thread = threading.Thread(target=self.do_work, args=(args, go, here))
thread.setDaemon(True)
thread.start()
def do_work(self, args, go, here):
# do work here
# wx.CallAfter will call the specified function on the GUI thread
# and it's safe to call from a separate thread
wx.CallAfter(self.work_completed, result, args, here)
def work_completed(self, result, args, here):
# use result args to update GUI controls here
self.text.SetLabel(result)
你可以在界面上调用 start_work
,比如在点击按钮时触发 EVT_BUTTON
事件来开始工作。do_work
会在一个单独的线程中运行,但它不能直接操作界面,因为这些操作必须在界面线程中进行。所以你需要用 wx.CallAfter
来在界面线程中运行一个函数,并且可以把工作线程中的参数传递给它。