pyqt4 和 pyserial
我想做一个应用程序,它可以不断监控串口,并根据从串口接收到的输入来改变用户界面。我已经在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 个回答
4
你不会漏掉任何字节,所有待处理的输入都会被缓存起来。
你有几种选择:
使用一个线程,通过PySerial的inWaiting()来轮询串口。
在主线程中使用一个定时器,通过PySerial的inWaiting()来轮询串口。
找到串口的句柄,然后把它传给QSocketNotifier。这种方法只在Linux上有效,但这样QSocketNotifier会监控与你的串口相关的文件,并在有新数据时发送信号。
方法2和3更好,因为你不需要额外的线程。