2009-04-21 87 views
4

我想做一個應用程序不斷觀看串口並根據從端口接收到的輸入更改用戶界面。我已經設法在Linux下使用pyserial讀取端口中的行,但我不確定如何以常規方式執行此操作:創建單獨的線程並檢查計時器事件上的輸入?我如何確保我不會錯過任何東西? (實施某種握手/協議似乎對此有點矯枉過正......)最重要的是:我如何使用qt4的設施來完成這項工作?pyqt4和pyserial

編輯:這就是我現在正在做的(我想與應用程序運行的剩餘部分,而不是等待定期做)

class MessageBox(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 

     ser = serial.Serial('/dev/ttyS0', 9600, bytesize=serial.EIGHTBITS, 
     parity=serial.PARITY_NONE,  
     stopbits=serial.STOPBITS_ONE, 
     timeout=None,   
     xonxoff=0,    
     rtscts=0, 
     interCharTimeout=None) 

     self.label = QtGui.QLabel(ser.readline(), self) 
     self.label.move(15, 10) 
     ser.close() 
     self.setGeometry(300, 300, 250, 150) 
     self.setWindowTitle('Authentication') 

     self.color = QtGui.QColor(0, 0, 0) 

     self.square = QtGui.QWidget(self) 
     self.square.setGeometry(120, 20, 100, 100) 
     self.square.setStyleSheet("QWidget { background-color: %s }" % self.color.name()) 

回答

4

您不會錯過任何字節,任何待處理的輸入被緩衝。

您有幾種選擇:

  1. 使用一個線程,民調PySerial/inWaiting()

  2. 使用在主線程定時器串行端口民調PySerial串口/在等待中。

  3. 找到端口的句柄並將其傳遞給QSocketNotifier。這隻適用於Linux,但在這種情況下,QSocketNotifier將觀察與串口相關的文件,並在有可用的時候發送信號。

方法2和方法3更好,因爲您不需要線程。