代码之家  ›  专栏  ›  技术社区  ›  akosch

pyqt4和pyserial

  •  4
  • akosch  · 技术社区  · 17 年前

    我想做一个应用程序,不断观察串行端口,并根据从端口接收的输入更改用户界面。我已经在Linux下使用pyserial从端口读取了行,但我不确定如何以常规方式执行此操作:创建一个单独的线程并检查计时器事件的输入?我如何确保我没有错过任何东西?(实现某种握手/协议似乎有点过头了……)最重要的是:我如何利用qt4的功能实现它?

    编辑: 这就是我现在正在做的(我希望在应用程序的其余部分运行而不是等待的情况下定期这样做)

    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())
    
    1 回复  |  直到 15 年前
        1
  •  4
  •   Philippe F    17 年前

    您不会丢失任何字节,任何挂起的输入都会被缓冲。

    您有几个选择:

    1. 使用使用PySerial/inWaiting()轮询串行端口的线程

    2. 找到端口的句柄并将其传递给QSocketNotifier。这仅适用于linux,但在这种情况下,QSocketNotifier将监视与串行端口关联的文件,并在有可用内容时发送信号。