Например:
class DemoFrame(wx.Frame):
def __init__(self):
Initializing
...
self.TextA = wx.StaticText(MainPanel, id = -1, label = "TextAOrWhatever")
self.TextB = wx.StaticText(MainPanel, id = -1, label = "TextBOrWhatever")
...
def StaticTextUpdating(self, ObjectName, Message):
ObjectName.SetLabel(Message)
def WorkerA(self):
while True:
Work on something
UpdatingThread = threading.Thread(target = self.StaticTextUpdating, args = (self.TextA, "Something for TextA", ))
UpdatingThread.start()
time.sleep(randomSecs)
def WorkerB(self):
while True:
Work on something
UpdatingThread = threading.Thread(target = self.StaticTextUpdating, args = (self.TextB, "Something for TextB", ))
UpdatingThread.start()
time.sleep(randomSecs)
...
def StartWorking(self):
Spawn WorkerA thread
Spawn WorkerB thread
...
Как видите, я всегда обновляю StaticText
в новых темах, и я на 100% уверен, что в любой определенный момент времени только один поток обновляет конкретныйобъект, но проблема в том, что время от времени, после некоторого запуска, некоторые объекты просто исчезают.Почему это происходит?Означает ли это, что обновление GUI не является потокобезопасным?Может быть, только один объект может быть обновлен в определенный момент времени?
Добавлено:
ОК, wx.CallAfter должно быть хорошим решением для вышеуказанных кодов.Но у меня возник другой вопрос, а что, если событие кнопки и SetLabel
происходит одновременно?Разве такие вещи не вызывают проблем, хотя я их не вижу?