我想要一个程序,从一个Arduino发送和接收数据,我用PyQt5制作了一个GUI,但是我有一个问题。 我有两个组合框,一个用于选择端口,另一个用于选择波特率,我实现了一个选择波特率的函数,但我不知道如何将端口名从第一个组合框发送到函数“defineSerial”有谁能帮我吗?在
from PyQt5 import QtCore, QtWidgets, QtSerialPort
from PyQt5.uic import loadUi
class Widget(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
loadUi('/Users/bogdanvesa/P2A_GUI/mainwindow.ui', self)
self.lcd_StartBtn.clicked.connect(self.send)
self.connect_btn.clicked.connect(self.connectToPort)
self.disconnect_btn.clicked.connect(self.disconnectFromPort)
self.baudrate_comboBox.addItem("1200")
self.baudrate_comboBox.addItem("2400")
self.baudrate_comboBox.addItem("4800")
self.baudrate_comboBox.addItem("9600")
self.baudrate_comboBox.currentTextChanged.connect(self.defineSerial)
def defineSerial(self, text):
if text == '1200':
self.baudrate = QtSerialPort.QSerialPort.Baud1200
elif text == '2400':
self.baudrate = QtSerialPort.QSerialPort.Baud2400
elif text == '4800':
self.baudrate = QtSerialPort.QSerialPort.Baud4800
elif text == '9600':
self.baudrate = QtSerialPort.QSerialPort.Baud9600
else:
print("Invalid")
self.serial = QtSerialPort.QSerialPort\
(
'/dev/tty.usbmodem14201',
baudRate= self.baudrate,
readyRead=self.receive
)
@QtCore.pyqtSlot()
def receive(self):
while self.serial.canReadLine():
text = self.serial.readLine().data().decode()
text = text.rstrip('\r\n')
self.light_lineEdit.setText(text)
print(text)
@QtCore.pyqtSlot()
def send(self):
self.serial.write(self.lcd_lineEdit.text().encode())
@QtCore.pyqtSlot()
def connectToPort(self):
self.serial.open(QtCore.QIODevice.ReadWrite)
@QtCore.pyqtSlot(bool)
def disconnectFromPort(self):
self.serial.close()
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
最好有一个QDialog进行配置,这样当您打开该对话框时,可用端口将被刷新:
如果您仍然想继续使用逻辑,那么最大的问题是:何时需要e端口名和波特率?连接中需要两个参数。
^{pr2}$相关问题 更多 >
编程相关推荐