这是一个例子:
class DemoFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = wx.Panel(self, -1)
...
initialize other elements
...
self.DoStuff()
def DoStuff(self):
self.panel.SetBackGroundColour(wx.Colour(240, 240, 240))
...
do something
...
现在您知道这绝对不是初始化 GUI 的好例子,因为do something
它很可能会在 GUI 运行时冻结,所以我将其调整为:
import threading
class DemoFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = wx.Panel(self, -1)
...
initialize other elements
...
DoStuffThead = threading.Thread(target = self.DoStuff, ())
DoStuffThead.start()
def DoStuff(self):
wx.CallAfter(self.ChangeBG, )
...
do something
...
def ChangeBG(self):
self.panel.SetBackGroundColour(wx.Colour(240, 240, 240))
上面的代码应该与第一个代码在空白时的工作方式完全相同do something
,但令我惊讶的是,我注意到在运行后面的代码时几乎没有背景绘图故障。
哪一部分出了问题?这不是在线程中更新 GUI 的正确方法吗?