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

时间:2014-01-22 17:52:59

标签: python multithreading user-interface tkinter pyserial

我正在做简单的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

0 个答案:

没有答案