我正在开发一个简单的软件,其中串行将反馈信息并在UI上更新。
该软件将在Raspbian Jessie,Python 3.4,PyQt5和Pyserial中运行。 此UI通过Qt Designer绘制并通过pyuic转换。 该软件的目的是监控通过MCU芯片连接到我的Pi的4步电机,串行信息来自该MCU。我没有使用Pi的GPIO,因为他们有其他用途。
我想在串行缓冲区填充信息后立即在屏幕上显示文本。
我曾尝试过以下代码,但它不够好,因为我必须依赖定时器来检查串行读取。一旦串口收到信息,还有另一种更有效的方法可以在屏幕上显示文本吗?
import sys, datetime
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QWidget
#import UI drawn from QtDesigner
from QFrame.Main_btn6 import Ui_MainWindow
import serial
def setupserial(object):
com = serial.Serial(port = "/dev/ttyUSB0",
baudrate = 115200,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS,
timeout = 3) #ms
return (com)
class Form_Operation(QtWidgets.QMainWindow):
def __init__(self, parent = None):
QWidget.__init__(self, parent)
self.timer = QtCore.QTimer(self)
self.ui = Ui_MainWindow()
self.serialcom = setupserial()
self.timer.setInterval(10)
self.timer.timeout.connect(self.hidden)
self.ui.setupUi(self)
self.initUI()
def initUI(self):
self.ui.MainDisplay.setText("Output from Serial comn.")
Exit = self.ui.Btn_Exit
Exit.clicked.connect(self.Exit_buttonClicked)
Clear = self.ui.Btn_Clear
Clear.clicked.connect(self.Clear_buttonClicked)
def hidden(self):
"""
Get texts from serial
"""
self.comread = self.com.readline().decode()
self.ui.MainDisplay.setText(self.comread)
def Exit_buttonClicked(self):
sys.exit()
def Clear_buttonClicked(self):
"""
Click to clear
"""
self.ui.MainDisplay.setText("")
def close(self):
self.timer.stop()
self.destroy()
def show(self):
self.timer.start()
self.showFullScreen()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
start = Form_Operation()
start.show()
sys.exit(app.exec_())