上一章节我们说了UI界面的设计,这一节来说下怎样实现其功能。
一.实例演示
1.创建一个.py文件,以下代码用来实现获取所有的串口信息:
import serial
import serial.tools.list_ports
from PyQt5.QtWidgets import QComboBox
class My_ComBoBox(QComboBox):
def __init__(self, parent = None):
super(My_ComBoBox,self).__init__(parent)
def showPopup(self):
# 先清空原有的选项
self.clear()
index = 1
# 获取接入的所有串口信息,插入combobox的选项中
port_list = self.get_port_list(self)
if port_list is not None:
for i in port_list:
self.insertItem(index, i)
index += 1
QComboBox.showPopup(self)# 弹出选项框
@staticmethod
# 获取接入的COM
def get_port_list(self):
try:
port_list = list(serial.tools.list_ports.comports())
for port in port_list:
yield str(port)
except Exception as err:
print("获取接入的串口设备出错!错误信息为:" + str(err))
然后在我们的UI界面代码下加入以下代码:
然后我们来看下打开我们的主文件运行一下试试:
点击显示如上述,获取到的全部串口信息。
2.打开串口:
前面的功能已经帮我们获取到了所有串口的信息,现在我们来实现打开串口的功能
(1)为了让大家弄明白,这边一步步讲解,前面已经获取到了所有串口信息,第一行代码则是用到了re模块的re.split()函数,主要是用来提取端口号信息,第二行代码的参数依次为端口号、波特率、超时等待。
comport_ = re.split(r'([,:` -])',ui.comboBox.currentText())
ser = serial.Serial(comport_[0],ui.comboBox_3.currentText(),timeout=self.timex)
(2)加入弹窗信息
msg_box = QMessageBox(QMessageBox.Warning, '完成', '串口已打开!')
msg_box.exec_()
(3)串口开启的代码如下:
def Open_serial(self):
global ser
try:
serrial_one = 0
if serrial_one == 0:
comport_ = re.split(r'([,:` -])',ui.comboBox.currentText())
ser = serial.Serial(comport_[0],ui.comboBox_3.currentText(),timeout=self.timex)
time.sleep(0.1)
ser.isOpen()
ser.flushInput()
msg_box = QMessageBox(QMessageBox.Warning, '完成', '串口已打开!')
msg_box.exec_()
except (IndexError,ValueError,TypeError,NameError) as e:
print(e)
运行如下:
3.关闭串口:
如何关闭串口,则是直接close就好了。
def close_serial(self):
ser.close()
msg_box = QMessageBox(QMessageBox.Warning, '完成', '串口已关闭!')
msg_box.exec_()
运行如下:
4.ascii类型发送数据及接收数据:
def write_serial(self):
if ui.radioButton.isChecked() == True:
ser.write(b' %s\n'%(ui.lineEdit.text().encode('ascii')))
Read = ser.readlines() ###读多行数据
ser.flushInput()
# time.sleep(2)
ui.textBrowser.append(str(Read))
# ser.flushInput()
QApplication.processEvents()
运行如下:
(1)先选中
(2)在文本框输入要发送的数据,textBrowser接收返回数据
hex发送数据跟上边相似,就不举例子了。
5.按钮功能:
def button(self):
ui.pushButton_2.clicked.connect(self.Open_serial)##按钮1
二.总结
基础的串口收发数据就如上所述了,今天先写到这儿。
@Neng