2016-09-20 6 views
0

Я выполнил простой учебник по созданию базового gui с использованием qt-конструктора и включил его в python. Затем я сделал простой скрипт python, который просто непрерывно считывает новые строки из последовательного порта и печатает их на терминале. Я хочу их комбинировать, но я боюсь, что мое понимание того, как работает pyqt4 или, возможно, самих классов, просто не хватает для выполнения такой простой задачи. Для начала все, что я хочу выполнить, - это непрерывно печатать входящие последовательные данные. Я попытался переместить цикл серийной печати в разные области сценария python, но это заставляет окно зависать. Каков правильный способ сделать это? PyQt код:создание простого терминала pyqt4 и pyserial, как обновить textbrowser

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(400, 300) 
     self.centralWidget = QtGui.QWidget(MainWindow) 
     self.centralWidget.setObjectName(_fromUtf8("centralWidget")) 
     self.verticalLayout = QtGui.QVBoxLayout(self.centralWidget) 
     self.verticalLayout.setMargin(11) 
     self.verticalLayout.setSpacing(6) 
     self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) 
     self.textBrowser = QtGui.QTextBrowser(self.centralWidget) 
     self.textBrowser.setObjectName(_fromUtf8("textBrowser")) 
     self.verticalLayout.addWidget(self.textBrowser) 
     self.pushButton = QtGui.QPushButton(self.centralWidget) 
     self.pushButton.setObjectName(_fromUtf8("pushButton")) 
     self.verticalLayout.addWidget(self.pushButton) 
     MainWindow.setCentralWidget(self.centralWidget) 
     self.menuBar = QtGui.QMenuBar(MainWindow) 
     self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 21)) 
     self.menuBar.setObjectName(_fromUtf8("menuBar")) 
     MainWindow.setMenuBar(self.menuBar) 
     self.mainToolBar = QtGui.QToolBar(MainWindow) 
     self.mainToolBar.setObjectName(_fromUtf8("mainToolBar")) 
     MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar) 
     self.statusBar = QtGui.QStatusBar(MainWindow) 
     self.statusBar.setObjectName(_fromUtf8("statusBar")) 
     MainWindow.setStatusBar(self.statusBar) 
     self.textBrowser.append("blabla") 
     self.retranslateUi(MainWindow) 
     QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.close) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) 
     self.pushButton.setText(_translate("MainWindow", "Close", None)) 
     self.textBrowser.append("blabla") 


if __name__ == "__main__": 
    import sys 
    import serial 
    ser = serial.Serial() 
    ser.baudrate = 115200 
    ser.port = 'COM6' 
    ser.open() 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = QtGui.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    ui.textBrowser.append(str(ser.readline())) 
    sys.exit(app.exec_()) 

серийный код:

import serial 
ser = serial.Serial() 
ser.baudrate = 115200 
ser.port = 'COM6' 
ser.open() 
while True: 
    print(ser.readline()) # read a '\n' terminated line 

ответ

0

Для всех, кто имеет подобный вопрос. Я нашел решение, выполнив таймер и создав новую функцию в классе:

self.my_timer = QtCore.QTimer() 
     self.my_timer.timeout.connect(self.print_serial) 
     self.my_timer.start(10) # milliseconds 

    def print_serial(self): 
     if ser.in_waiting: 
      self.textBrowser.append(str(ser.readline())) 

это работало для моего применения.

Смежные вопросы