pyqt4 и pyserial - PullRequest
       10

pyqt4 и pyserial

4 голосов
/ 21 апреля 2009

Я хочу сделать приложение, постоянно отслеживающее последовательный порт и изменяющее пользовательский интерфейс в соответствии с данными, полученными от порта. Мне удалось прочитать строки из порта с помощью pyserial под Linux, но я не уверен, как это сделать обычным образом: создать отдельный поток и проверить ввод для события таймера? Как мне убедиться, что я ничего не пропустил? (реализация какого-либо рукопожатия / протокола кажется излишним для этого ...) И самое главное: как мне это сделать с помощью средств 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 голосов
/ 21 апреля 2009

Вы не пропустите ни одного байта, все ожидающие данные буферизируются.

У вас есть несколько вариантов:

  1. использовать поток, который опрашивает последовательный порт с помощью PySerial / inWaiting ()

  2. Используйте таймер в главном потоке, который опрашивает последовательный порт с помощью PySerial / inWaiting.

  3. найдите дескриптор порта и передайте его в QSocketNotifier. Это работает только в Linux, но в этом случае QSocketNotifier будет наблюдать файл, связанный с вашим последовательным портом, и отправлять сигнал, когда что-то будет доступно.

Методы 2 и 3 лучше, потому что вам не нужна нить.

...