pyqt5中使用按钮控制串口开关
时间: 2023-07-31 07:13:31 浏览: 54
在PyQt5中使用按钮控制串口开关,可以参考以下步骤:
1. 导入必要的模块
```python
import sys
import serial
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel
from PyQt5.QtCore import QThread, pyqtSignal
```
2. 创建主窗口类和串口线程类
```python
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("串口控制")
self.setGeometry(100, 100, 300, 200)
self.label = QLabel(self)
self.label.move(20, 20)
self.btn_open = QPushButton("打开串口", self)
self.btn_open.move(20, 60)
self.btn_open.clicked.connect(self.openSerialPort)
self.btn_close = QPushButton("关闭串口", self)
self.btn_close.move(120, 60)
self.btn_close.clicked.connect(self.closeSerialPort)
self.ser = serial.Serial()
def openSerialPort(self):
self.ser.port = "COM1" # 设置串口号
self.ser.baudrate = 115200 # 设置波特率
self.ser.bytesize = 8 # 设置数据位
self.ser.stopbits = 1 # 设置停止位
self.ser.parity = "N" # 设置校验位
try:
self.ser.open() # 打开串口
self.label.setText("串口已打开")
except Exception as e:
print(e)
def closeSerialPort(self):
if self.ser.isOpen():
self.ser.close() # 关闭串口
self.label.setText("串口已关闭")
```
```python
class SerialThread(QThread):
receive_signal = pyqtSignal(str)
def __init__(self, ser):
super().__init__()
self.ser = ser
def run(self):
while True:
if self.ser.isOpen():
try:
data = self.ser.readline().decode("utf-8") # 读取串口数据
self.receive_signal.emit(data) # 发送信号
except Exception as e:
print(e)
```
3. 在主窗口类中创建串口线程对象,并启动线程
```python
self.serial_thread = SerialThread(self.ser)
self.serial_thread.receive_signal.connect(self.receiveData) # 接收串口数据信号连接槽函数
self.serial_thread.start() # 启动串口线程
```
4. 在槽函数中处理串口数据
```python
def receiveData(self, data):
print(data)
```
这样就可以通过按钮控制串口的开关,并通过线程实时接收串口数据。