pyqt4 和 pyserial

Posted

技术标签:

【中文标题】pyqt4 和 pyserial【英文标题】:pyqt4 and pyserial 【发布时间】:2009-04-21 10:37:15 【问题描述】:

我想做一个应用程序,不断监视串口并根据从端口接收到的输入更改用户界面。我已经设法在 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】:

您不会错过任何字节,任何待处理的输入都会被缓冲。

您有多种选择:

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

    在主线程中使用计时器,通过 PySerial/inWaiting 轮询串行端口。

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

方法 2 和 3 更好,因为您不需要线程。

【讨论】:

以上是关于pyqt4 和 pyserial的主要内容,如果未能解决你的问题,请参考以下文章

OS X 上的 PyQt4 和 Python 3.2

PyQt4 信号和 QObject.Emit()

PyQt4:QPainter 和 QGraphicsSvgItem

PyQt4 QPushButton 文本和图标对齐

PyQt4 和 QtWebKit - 如何自动滚动视图?

pyqt4 和 pyserial