wxPython Application.DoEvents()是否等效?

wxPython Application.DoEvents()是否等效?,python,wxpython,wxwidgets,Python,Wxpython,Wxwidgets,wxPython中是否有与.DoEvents()等效的应用程序 我正在创建一个表单,然后执行一个缓慢的I/O事件,在事件完成之前,表单只绘制了一部分。我想在I/O开始之前将表单完全绘制出来 我尝试了self.Refresh(),但没有效果。或 尽管您确实应该使用单独的线程来执行I/O,并使用来向GUI线程发布更新 我通常使用这样的模式: def start_work(self): thread = threading.Thread(target=self.do_work, args=(a

wxPython中是否有与.DoEvents()等效的应用程序

我正在创建一个表单,然后执行一个缓慢的I/O事件,在事件完成之前,表单只绘制了一部分。我想在I/O开始之前将表单完全绘制出来

我尝试了
self.Refresh()
,但没有效果。

尽管您确实应该使用单独的线程来执行I/O,并使用来向GUI线程发布更新

我通常使用这样的模式:

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)

您可以从GUI调用
start\u work
,例如在
EVT\u按钮上调用
event来启动工作
do_work
在单独的线程上运行,但它无法执行任何与GUI相关的操作,因为这必须在GUI线程上完成。因此,您可以使用
wx.CallAfter
在GUI线程上运行函数,并可以从工作线程传递参数。

感谢您的快速响应。我将在另一个线程上研究IO。非常感谢您,先生,没有任何文档说明如何在wxpython中正确使用IO。你的例子很好地解释了这一点。