Python 从串行线程到Tkinter GUI的队列通信
我正在做一个简单的gui,用于从串行COM端口连续读取数据流并显示结果。我无法启动并运行队列将数据从读取线程推送到主(GUI)部分。我想我遗漏了一些部分,但我不知道是什么 我可以很容易地启动线程并从COM端口读取数据(之后再打印),但似乎并没有什么东西要排队,因为当我在GUI部件中打印输出时是空的。除此之外,读取和主线程运行正常。 你知道如何检查队列中是否有东西吗 如果您可以检查的话,这是代码的一部分。 同时也很抱歉把缩进搞砸了:-P 多谢各位Python 从串行线程到Tkinter GUI的队列通信,python,multithreading,user-interface,tkinter,pyserial,Python,Multithreading,User Interface,Tkinter,Pyserial,我正在做一个简单的gui,用于从串行COM端口连续读取数据流并显示结果。我无法启动并运行队列将数据从读取线程推送到主(GUI)部分。我想我遗漏了一些部分,但我不知道是什么 我可以很容易地启动线程并从COM端口读取数据(之后再打印),但似乎并没有什么东西要排队,因为当我在GUI部件中打印输出时是空的。除此之外,读取和主线程运行正常。 你知道如何检查队列中是否有东西吗 如果您可以检查的话,这是代码的一部分。 同时也很抱歉把缩进搞砸了:-P 多谢各位 class MyGUI(Tkinter.Tk):
class MyGUI(Tkinter.Tk):
def __init__(self, parent):
Tkinter.Tk.__init__(self, parent)
self.parent = parent
self.queueData = Queue.Queue() # create queue
self.initialize()
def initialize(self):
"""Create the GUI"""
self.grid()
...gui code here...
def processQueueData(self):
try:
rawData = self.queueData.get()
except Queue.Empty:
pass
else:
print 'GUI:'+ rawData
#show result of the task
finally:
self.queueDataID = self.after(50, self.processQueueData)
阅读线索如下:
class MyProcess(threading.Thread):
def __init__(self, parent, queueData): #def __init__(self, startValue)
threading.Thread.__init__(self)
self._stop = False
self.parent = parent
self.queueData = queueData
try:
port = app.boxPort.get()
self.ser = serial.Serial(port, baudrate=19200, timeout=0, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE)
except serial.SerialException:
print ('Cannot open port')
self.stop()
else:
app.labelConStatus.set(u'Connected to ' + port)
def stop(self):
self._stop = True
try:
self.ser.close()
except serial.SerialException:
print ('Cannot close port')
else:
app.labelConStatus.set(u'Disconnected')
def run (self):
while self._stop == False:
data = self.ser.read(1)
n = self.ser.inWaiting()
if n:
data = data + self.ser.read(n)
self.queueData.put(data)
# print 'PORT:'+data
你问题中的代码缩进混乱了。你能定义“不启动并运行”吗?当您将消息放入队列时,它会崩溃吗?当你脱下它们时它会崩溃吗?你能把它们放进去,但看不懂吗?