Megpróbálok értékeket nyomtatni egy szálból egy másik osztályban meghatározott TextCtrl ablakba. A közzétett kód egy lecsupaszított verzió, növeli a háttérszálban lévő értéket, majd nem próbálja kinyomtatni a TextCtrl ablakba.
Megpróbáltam a pubsub használatát, de nem találtam olyan példát, amely elég közel lenne a kódomhoz, hogy "integrálhassam".
Frissítés
Hozzáadtam a szálomat a saját osztályához, és most hibaüzenetet kapok.
Hogyan használhatom a post eseményt, hogy adatokat küldjek a másik osztály textCtrl mezőjébe?
import wx
import time
import threading
GlobalVar = False
#draws the GUI
class Mywin(wx.Frame):
def __init__(self, parent, title):
#Frame
super(Mywin, self).__init__(parent, title = title,size = (500,300))
panel = wx.Panel(self)
#Constant stream toggle Button
self.tbtn =wx.ToggleButton(self, label="Constant Stream", pos=(20, 90))
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON, self.OnToggle)
#Text window
self.logger = wx.TextCtrl(self, pos=(150,0), size=(400,100), style=wx.TE_MULTILINE | wx.TE_READONLY)
#Draws and laysout the GUI
panel.Layout()
self.Centre()
self.Show()
self.Fit()
#=====================================================================
def OnToggle(self,event): #Toggle on, start background stream
state = event.GetEventObject().GetValue()
global GlobalVar
if state == True:
GlobalVar = True
Stream.start()
event.GetEventObject().SetLabel("Streaming")
else:
GlobalVar = False
event.GetEventObject().SetLabel("Constant Stream")
class StreamThread(threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
global GlobalVar
IncrementMe = 0
while GlobalVar == True:
wx.PostEvent(Mywin.logger.AppendText(str(IncrementMe)))
print(IncrementMe)
time.sleep(1)
IncrementMe = IncrementMe + 1
Stream = StreamThread(1, "Stream_Thread")
Stream.daemon = True
app = wx.App()
Mywin(None, 'Incrementer')
app.MainLoop()
del app