Python 3.8 + PyCharm + PyQt5(四)-串口助手

Python 3.8 + PyCharm + PyQt5(四)-串口助手


所有后面讲解和记录的源码都会在 GuiHub中,可以自行下载
上节我们讲到通过数字输入框,然后做了一个简单的加法,操作了按钮事件,字符转换等。
这次我们来讲讲实现串口助手,通过串口进行通讯。

UI布局

首先创建pycharm工程建立新的UI,并拖拽QT控件,进行UI的布局,布局如下,当然个人喜好,喜欢怎么放就怎么放。
在这里插入图片描述
当然两个按钮分别对应了2个槽:
一个打开串口槽:
在这里插入图片描述
一个发送给数据槽:
在这里插入图片描述
点击保存后,用PyUIC形成.py文件。

代码编写

模块加载

串口小助手,那么我们就需要对串口进行读写,首先我们在python模块中增加串口模块,这边我们说一个新的增加模块的方法,在前面的讲解中,我们有说到增加模块的方法有2中,现在说第三种:
打开pycharm,下面选择这个选项,打开来发现,这个其实是虚拟环境。这边我们首先输入

pip list

会打印出当前加载好的模块,这边显示的pyserial就是我们需要的串口模块。
在这里插入图片描述
可以在这边输入

pip install pyserial

来对串口模块进行安装。
在这里插入图片描述
我这边因为已经安装好,所以提示了当前包的版本信息。

代码实现

串口通信,首先我们得得到电脑的串口号,python的串口接口可以获取到电脑设备的串口列表,

COM_List = list(serial.tools.list_ports.comports())
if len(COM_List) == 0:
   print('无可用串口')
else:
    for i in range(0, len(COM_List)):
        print(COM_List[i])

通过这个接口,我们可以看到最终打印可以看到,我们电脑有2个串口,前面是串口编号,后面是串口的名称。
在这里插入图片描述
因此,我们需要将这两个放到我们的界面的串口列表中。
这边我们把这部分代码封装成一个函数。

# 获取串口列表
def Get_Com_List():
    return list(serial.tools.list_ports.comports())


# 界面UI按键程序重写
class Mywindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(Mywindow, self).__init__()
        self.setupUi(self)
        COM_List = Get_Com_List()  # 获取串口列表
        for i in range(0, len(COM_List)):  # 将列表导入到下拉框
            self.Com_Port.addItem(COM_List[i].name)

    def Open_Com_Click(self):
        print("点击了打开串口按钮")


    def Send_Data_Click(self):
        print("点击了发送数据按钮")

首先我们重写UI界面,将两个按钮事件进行简单的定义,我们首先完成串口号的获取。
在初始化函数中,我们增加了获取串口号,并且把串口号的名称加入到Com_Port控件中,具体效果是这样的:
在这里插入图片描述
串口号中已经可以下拉选择哪个串口。
同理我们把串口波特率也加到下面波特率的下拉框中,效果如图:
在这里插入图片描述
我这边就只添加了2种进行测试。代码如下:

        self.Com_Band.addItem("9600")
        self.Com_Band.addItem("115200")

获取到了串口号了,接下来我们就要来打开串口,发送数据,这边我们需要先知道下拉框选择了哪个串口。
通过接口

        self.Com_Port.currentText()

来进行获取当前是COM多少。然后同理选择波特率,然后进行打开串口。:

    def Open_Com_Click(self):
        global custom_serial  # 全局变量,需要加global
        global Com_Open_Flag
        print("点击了打开串口按钮")
        if self.Open_Com.text() == "打开串口":
            print(self.Com_Port.currentText())
            custom_serial = serial.Serial(self.Com_Port.currentText(), int(self.Com_Band.currentText()), timeout=0.5)
            if custom_serial.isOpen():
                print("open success")
                Com_Open_Flag = True
                self.Open_Com.setText("关闭串口")
                self.Com_Band.setEnabled(False)  # 串口号和波特率变为不可选择
                self.Com_Port.setEnabled(False)
            else:
                print("open failed")
        else:
            Com_Open_Flag = False
            self.Open_Com.setText("打开串口")
            custom_serial.close()
            self.Com_Band.setEnabled(True)  # 串口号和波特率变为可选择
            self.Com_Port.setEnabled(True)

这是对打开按钮程序的重写,答题意思我想大家以下就看懂了,首先就是判断当前状态,按钮点击是打开串口还是关闭串口,执行不同的操作,还有打开失败还是成功。大家应该很容易看懂。
接下来就是串口的收发数据了。
数据接收
数据接收部分,有一个比较难搞的地方,就是一旦你串口打开了,那么数据就必须要一直处于接收状态,如果你按照往常的使用while True来使用,你会发现你的显示界面卡着不动了。这边我们需要引入新的知识点:

线程

线程简单应用,就是打开线程,然后一直读串口数据:

import _thread

# 获取串口数据
def Com_Data_Rsv(threadName):
    while True:
        while Com_Open_Flag:
            data = custom_serial.read_all()
            if data == b'':
                continue
            else:
                print("receive : ", data)
                window.Set_Display_Data(data)
                
_thread.start_new_thread(Com_Data_Rsv, ("Thread-1",))

然后在UI界面的类中添加方法:

    def Set_Display_Data(self, Data):
        self.Date_Display.insertPlainText(str(Data, encoding="utf-8"))  # 显示数据

打开线程,一直接收串口数据,只是串口处于打开情况下,我们才处理接收数据,最后把数据打印在界面上显示。
具体效果如下:
在这里插入图片描述

发送数据

综上所述,分为以下几个步骤
1、按钮事件重写
2、获取发送文本
3、通过串口发送
代码如下:

    def Send_Data_Click(self):
        print("点击了发送数据按钮")
        Data_Need_Send = self.Send_Data_Dsiplay.toPlainText()
        if custom_serial.isOpen():
            custom_serial.write(Data_Need_Send.encode("gbk"))
        else:
            print("请先打开串口")

最终效果:
在这里插入图片描述
好了,当然还有很多不完善的地方,比如很多代码异常保护等等,大家可以自行增加,自行补充功能。本次讲解就到这。
QT部分其他功能大多都是这样了,大家有什么功能需要增加的,或者不懂的,可以留言,大家一起交流。
最终代码:

# ! /usr/bin/env python
# -*- coding: utf-8 -*-

import serial
import serial.tools.list_ports
import sys
from SerialPortTools import Ui_MainWindow
from PyQt5 import QtWidgets
import _thread

Com_Open_Flag = False  # 串口打开标志
COM_Band = {"9600", "115200"}
custom_serial = serial.Serial


# 获取串口列表
def Get_Com_List():
    return list(serial.tools.list_ports.comports())


# 获取串口数据
def Com_Data_Rsv(threadName):
    while True:
        while Com_Open_Flag:
            data = custom_serial.read_all()
            if data == b'':
                continue
            else:
                print("receive : ", data)
                window.Set_Display_Data(data)


# 界面UI按键程序重写
class Mywindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(Mywindow, self).__init__()
        self.setupUi(self)
        COM_List = Get_Com_List()  # 获取串口列表
        for i in range(0, len(COM_List)):  # 将列表导入到下拉框
            self.Com_Port.addItem(COM_List[i].name)
        self.Com_Band.addItem("9600")
        self.Com_Band.addItem("115200")

    def Open_Com_Click(self):
        global custom_serial  # 全局变量,需要加global
        global Com_Open_Flag
        print("点击了打开串口按钮")
        if self.Open_Com.text() == "打开串口":
            print(self.Com_Port.currentText())
            custom_serial = serial.Serial(self.Com_Port.currentText(), int(self.Com_Band.currentText()), timeout=0.5)
            if custom_serial.isOpen():
                print("open success")
                Com_Open_Flag = True
                self.Open_Com.setText("关闭串口")
                self.Com_Band.setEnabled(False)  # 串口号和波特率变为不可选择
                self.Com_Port.setEnabled(False)
            else:
                print("open failed")
        else:
            Com_Open_Flag = False
            self.Open_Com.setText("打开串口")
            custom_serial.close()
            self.Com_Band.setEnabled(True)  # 串口号和波特率变为可选择
            self.Com_Port.setEnabled(True)

    def Set_Display_Data(self, Data):
        self.Date_Display.insertPlainText(str(Data, encoding="utf-8"))

    def Send_Data_Click(self):
        print("点击了发送数据按钮")
        Data_Need_Send = self.Send_Data_Dsiplay.toPlainText()
        if custom_serial.isOpen():
            custom_serial.write(Data_Need_Send.encode("gbk"))
        else:
            print("请先打开串口")



if __name__ == '__main__':
  app = QtWidgets.QApplication(sys.argv)
  window = Mywindow()
  window.show()
  _thread.start_new_thread(Com_Data_Rsv, ("Thread-1",))
  sys.exit(app.exec_())

  • 11
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
### 回答1: Python3和PyCharm是开发Python项目的常用工具,而PyQt5Python的一个GUI库。搭建Python3、PyCharmPyQt5的环境可以让我们更方便地开发和运行Python GUI应用程序。 下面是Python3、PyCharmPyQt5环境搭建的步骤图文详解: 第一步:下载和安装Python3。在Python官网(https://www.python.org/downloads/)下载最新版本的Python3,并按照安装向导进行安装。 第二步:下载和安装PyCharm。在JetBrains官网(https://www.jetbrains.com/pycharm/download/)下载最新版本的PyCharm,选择适合自己操作系统的版本,并按照安装向导进行安装。 第三步:打开PyCharm,创建一个新的Python项目。选择“Create New Project”,填写项目名称和项目路径,点击“Create”。 第步:在PyCharm中配置Python解释器。点击“File”->“Settings”,在弹出的设置对话框中选择“Project: 项目名称”->“Project Interpreter”。点击右侧的“Python Interpreter”下拉框,选择已经安装的Python3解释器,点击“OK”。 第五步:安装PyQt5库。点击“File”->“Settings”,在弹出的设置对话框中选择“Project: 项目名称”->“Project Interpreter”。点击右侧的加号按钮,在弹出的对话框中搜索并选择“PyQt5”,点击“Install Package”按钮进行安装。 第六步:编写Python代码并运行。在PyCharm中创建一个新的Python文件,导入PyQt5库,编写GUI应用程序的代码。点击运行按钮或使用快捷键运行程序。 通过以上步骤,我们已经成功搭建了Python3、PyCharmPyQt5的环境,并可以开始开发和运行Python GUI应用程序了。 希望以上内容对您有所帮助!如有任何疑问,请随时提问。 ### 回答2: Python3 Pycharm PyQt5环境搭建步骤图文详解: 第一步:安装Python3 在Python官方网站上下载Python3的安装包,并进行安装。安装过程中记得勾选“Add Python3.x to PATH”选项,这样可以将Python3添加到系统环境变量中。 第二步:安装Pycharm 在JetBrains官方网站上下载Pycharm的安装包,并进行安装。安装过程中可以选择社区版或专业版,选择一个适合自己的版本。 第三步:创建项目 打开Pycharm,点击“Create New Project”按钮创建一个新的项目。选择合适的项目存放路径,然后点击“Create”按钮。 第步:配置编译器 在新建的项目中,点击“File”菜单,选择“Settings”选项打开设置窗口。在设置窗口中选择“Project Interpreter”,然后点击右侧的“Create”按钮。 第五步:安装PyQt5 在创建新的虚拟环境时,可以选择“New Environment”或者“Existing Environment”选项。如果选择“New Environment”,则需要选择Python解释器的路径;如果选择“Existing Environment”,则需要选择已有的Python解释器。 接下来,在“Project Interpreter”设置的窗口中点击右上方的“+”按钮,在搜索框中输入“PyQt5”,然后点击下方的“Install Package”按钮进行安装。 第六步:编写代码 安装完PyQt5后,在Pycharm中根据自己的需求开始编写代码。可以参考PyQt5的官方文档和示例代码,进行学习和实践。 以上就是Python3 Pycharm PyQt5环境搭建的步骤图文详解。希望对您有帮助! ### 回答3: python3 pycharm pyqt5环境搭建步骤图文详解: 1. 首先,确保你已经安装了Python3和PyCharm。可以从Python官方网站(https://www.python.org/downloads/)下载Python3,并从JetBrains官方网站(https://www.jetbrains.com/pycharm/download/)下载和安装PyCharm。 2. 打开PyCharm,点击“Create New Project”来创建一个新的项目。 3. 在弹出的对话框中,选择一个位置来存储你的项目文件,并为项目起一个名字。 4. 在项目创建完毕后,打开PyCharm的设置(Preferences)窗口,选择“Project Interpreter”。 5. 在Project Interpreter窗口的右上角,点击齿轮图标,选择“Add”。 6. 在弹出的对话框中,选择“System Interpreter”,然后点击右边的“…”按钮。 7. 在选择解释器对话框中,选择你电脑上已安装的Python3解释器,并点击“OK”。 8. 在Project Interpreter窗口中,点击右下角的“+”按钮。 9. 在弹出的对话框中,搜索并选择需要安装的第三方库,比如PyQt5,然后点击“Install”按钮。 10. PyCharm会自动下载并安装你选择的第三方库。安装完成后,点击“OK”关闭Project Interpreter窗口。 11. 现在,你已经成功搭建了Python3、PyCharmPyQt5的开发环境。 总结:要搭建Python3、PyCharmPyQt5的开发环境,你需要先安装Python3和PyCharm,然后在PyCharm的设置中添加Python解释器,并安装需要的第三方库,如PyQt5。这样,你就可以开始使用PyCharm进行PythonPyQt5的开发了。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

誓言神月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值