次に例を示します。
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
...
ご存知do something
のように、これは実行中に GUI をフリーズさせる可能性が高いため、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 を更新する正しい方法ではありませんか?