wxPython中相当于Application.DoEvents()的是什么?

2 投票
1 回答
4080 浏览
提问于 2025-04-15 19:46

在wxPython中有没有类似于Application.DoEvents()的东西?

我正在创建一个表单,然后进行一个比较慢的输入输出操作,这时候表单只部分显示出来,等这个操作完成后才会完全显示。我希望在输入输出操作开始之前,表单能完全显示出来。

我试过用 self.Refresh(),但是没有效果。

1 个回答

1

wx.Yield 或者 wx.SafeYield

其实,做输入输出操作时,最好是用一个单独的线程来处理,然后用 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 来在界面线程中运行一个函数,并且可以把工作线程中的参数传递给它。

撰写回答