Python 从串行线程到Tkinter GUI的队列通信

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):

我正在做一个简单的gui,用于从串行COM端口连续读取数据流并显示结果。我无法启动并运行队列将数据从读取线程推送到主(GUI)部分。我想我遗漏了一些部分,但我不知道是什么

我可以很容易地启动线程并从COM端口读取数据(之后再打印),但似乎并没有什么东西要排队,因为当我在GUI部件中打印输出时是空的。除此之外,读取和主线程运行正常。 你知道如何检查队列中是否有东西吗

如果您可以检查的话,这是代码的一部分。 同时也很抱歉把缩进搞砸了:-P 多谢各位

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

你问题中的代码缩进混乱了。你能定义“不启动并运行”吗?当您将消息放入队列时,它会崩溃吗?当你脱下它们时它会崩溃吗?你能把它们放进去,但看不懂吗?