问题描述
我在 pyqt5 中设计了一个 GUI。所有其他功能都运行良好,但是如果我按下按钮(连接),我会从串行端口接收连续数据(它工作正常)但它处于无限循环中,因此稍后我无法切换按钮,即停止连续数据。 代码:部分代码(跳过了一些工作正常的部分)
from PyQt5 import QtCore,QtGui,QtWidgets,QtSerialPort
import traceback,serial
class Ui_MainWindow(object):
def setupUi(self,MainWindow):
MainWindow.setobjectName("MainWindow")
MainWindow.resize(800,600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setobjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(540,60,101,61))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton.setFont(font)
self.pushButton.setobjectName("pushButton")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30,-10,221,71))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setobjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(30,81,51))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.label_2.setFont(font)
self.label_2.setobjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(160,130,141,81))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.label_3.setFont(font)
self.label_3.setobjectName("label_3")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(20,180,201,61))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.label_4.setFont(font)
self.label_4.setobjectName("label_4")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(700,240,51))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton_2.setFont(font)
self.pushButton_2.setobjectName("pushButton_2")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(20,330,251,21))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.label_5.setFont(font)
self.label_5.setobjectName("label_5")
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(30,651,71))
font = QtGui.QFont()
font.setPointSize(12)
self.lineEdit_2.setFont(font)
self.lineEdit_2.setobjectName("lineEdit_2")
self.textbrowser = QtWidgets.QTextbrowser(self.centralwidget)
self.textbrowser.setGeometry(QtCore.QRect(260,150,381,51))
font = QtGui.QFont()
font.setPointSize(12)
self.textbrowser.setFont(font)
self.textbrowser.setobjectName("textbrowser")
self.textbrowser_2 = QtWidgets.QTextbrowser(self.centralwidget)
self.textbrowser_2.setGeometry(QtCore.QRect(30,371,731,181))
font = QtGui.QFont()
font.setPointSize(12)
self.textbrowser_2.setFont(font)
self.textbrowser_2.setobjectName("textbrowser_2")
self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_4.setGeometry(QtCore.QRect(140,31))
font = QtGui.QFont()
font.setPointSize(12)
self.pushButton_4.setFont(font)
self.pushButton_4.setobjectName("pushButton_4")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(270,31))
font = QtGui.QFont()
font.setPointSize(12)
self.pushButton_3.setFont(font)
self.pushButton_3.setobjectName("pushButton_3")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(100,91,61))
font = QtGui.QFont()
font.setPointSize(12)
self.comboBox.setFont(font)
self.comboBox.setobjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.label_6 = QtWidgets.QLabel(self.centralwidget)
self.label_6.setGeometry(QtCore.QRect(250,70,41))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.label_6.setFont(font)
self.label_6.setobjectName("label_6")
self.comboBox_2 = QtWidgets.QComboBox(self.centralwidget)
self.comboBox_2.setGeometry(QtCore.QRect(360,61))
font = QtGui.QFont()
font.setPointSize(12)
self.comboBox_2.setFont(font)
self.comboBox_2.setobjectName("comboBox_2")
self.comboBox_2.addItem("")
self.comboBox_2.addItem("")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0,800,21))
self.menubar.setobjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setobjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.pushButton.setCheckable(True)
self.pushButton.clicked.connect(self.Connect)
self.pushButton.toggle()
self.pushButton_2.clicked.connect(self.Send)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self,MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setwindowTitle(_translate("MainWindow","Serial Port"))
self.pushButton.setText(_translate("MainWindow","Connect"))
self.label.setText(_translate("MainWindow","Serial Data"))
self.label_2.setText(_translate("MainWindow","Port "))
self.label_3.setText(_translate("MainWindow","Status :"))
self.label_4.setText(_translate("MainWindow","Request"))
self.pushButton_2.setText(_translate("MainWindow","Send"))
self.label_5.setText(_translate("MainWindow","Message Log"))
self.pushButton_4.setText(_translate("MainWindow","Clear"))
self.pushButton_3.setText(_translate("MainWindow","Save"))
self.comboBox.setItemText(0,_translate("MainWindow","COM8"))
self.comboBox.setItemText(1,"COM1"))
self.comboBox.setItemText(2,"COM2"))
self.comboBox.setItemText(3,"COM3"))
self.comboBox.setItemText(4,"COM4"))
self.comboBox.setItemText(5,"COM5"))
self.comboBox.setItemText(6,"COM6"))
self.comboBox.setItemText(7,"COM7"))
self.comboBox.setItemText(8,"COM9"))
self.comboBox.setItemText(9,"COM10"))
self.comboBox.setItemText(10,"COM11"))
self.comboBox.setItemText(11,"COM12"))
self.comboBox.setItemText(12,"COM13"))
self.label_6.setText(_translate("MainWindow","Baudrate"))
self.comboBox_2.setItemText(0,"9600"))
self.comboBox_2.setItemText(1,"115200"))
def Connect(self):
port=self.comboBox.currentText()
baudrate=self.comboBox_2.currentText()
serialPort = serial.Serial(port =port,baudrate=baudrate,bytesize=8,timeout=2,stopbits=serial.STOPBITS_ONE)
serialString = " "
while 1:
if(serialPort.in_waiting > 0):
serialString = serialPort.readline()
print(serialString.decode('Ascii'))
self.textbrowser.setText("Connected")
self.textbrowser_2.append(serialString.decode('Ascii'))
self.textbrowser_2.repaint()
if self.pushButton.isEnabled():
QtCore.QTimer.singleShot(1,self.Connect)
else:
#self.file.close()
self.pushButton.toggle()
serialPort.close()
def Send(self):
port=self.comboBox.currentText()
baudrate=self.comboBox_2.currentText()
serialPort = serial.Serial(port =port,stopbits=serial.STOPBITS_ONE)
serialString = ""
serialPort.write(str.encode(self.lineEdit_2.text()))
#print(serialString.decode('ascii'))
self.textbrowser_2.append(self.lineEdit_2.text())
self.textbrowser_2.repaint()
self.lineEdit_2.clear()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)