目录
Python Qt GUI设计系列博文终于到了实战篇,本篇博文将贯穿之前的基础知识点实现一款串口调试助手。
关注【公众号】 美男子玩编程,回复关键字:串口调试助手,获取项目源码~
1、UI设计
UI设计使用Qt Creator实现,组件布局如下所示:
2、将UI文件转换为Py文件
这里使用Python脚本的方式将UI文件转换为Python文件,代码如下所示:
-
import os
-
import os.path
-
dir ='./' #文件所在的路径
-
#找出路径下所有的.ui文件
-
def listUiFile():
-
list = []
-
files = os.listdir(dir)
-
for filename in files:
-
#print(filename)
-
if os.path.splitext(filename)[1] == '.ui':
-
list.append(filename)
-
return list
-
#把扩展名未.ui的转换成.py的文件
-
def transPyFile(filename):
-
return os.path.splitext(filename)[0] + '.py'
-
#通过命令把.ui文件转换成.py文件
-
def runMain():
-
list = listUiFile()
-
for uifile in list:
-
pyfile = transPyFile(uifile)
-
cmd = 'pyuic5 -o {pyfile} {uifile}'.format(pyfile=pyfile, uifile=uifile)
-
os.system(cmd)
-
if __name__ =="__main__":
-
runMain()
3、逻辑功能实现
3.1、初始化程序
首先初始化一些组件和标志位的状态,设置信号与槽的关系,实现代码如下所示:
-
# 初始化程序
-
def __init__(self):
-
super(Pyqt5_Serial, self).__init__()
-
self.setupUi(self)
-
self.init()
-
self.ser = serial.Serial()
-
self.port_check()
-
# 设置Logo和标题
-
self.setWindowIcon(QIcon('Com.png'))
-
self.setWindowTitle("串口调试助手 【公众号】美男子玩编程")
-
# 设置禁止拉伸窗口大小
-
self.setFixedSize(self.width(), self.height())
-
# 发送数据和接收数据数目置零
-
self.data_num_sended = 0
-
self.Lineedit2.setText(str(self.data_num_sended))
-
self.data_num_received = 0
-
self.Lineedit3.setText(str(self.data_num_received))
-
# 串口关闭按钮使能关闭
-
self.Pushbuttom3.setEnabled(False)
-
# 发送框、文本框清除
-
self.Text1.setText("")
-
self.Text2.setText("")
-
# 建立控件信号与槽关系
-
def init(self):
-
# 串口检测按钮
-
self.Pushbuttom2.clicked.connect(self.port_check)
-
# 串口打开按钮
-
self.Pushbuttom1.clicked.connect(self.port_open)
-
# 串口关闭按钮
-
self.Pushbuttom3.clicked.connect(self.port_close)
-
# 定时发送数据
-
self.timer_send = QTimer()
-
self.timer_send.timeout.connect(self.data_send)
-
self.Checkbox7.stateChanged.connect(self.data_send_timer)
-
# 发送数据按钮
-
self.Pushbuttom6.clicked.connect(self.data_send)
-
# 加载日志
-
self.Pushbuttom4.clicked.connect(self.savefiles)
-
# 加载日志
-
self.Pushbuttom5.clicked.connect(self.openfiles)
-
# 跳转链接
-
self.commandLinkButton1.clicked.connect(self.link)
-
# 清除发送按钮
-
self.Pushbuttom7.clicked.connect(self.send_data_clear)
-
# 清除接收按钮
-
self.Pushbuttom8.clicked.connect(self.receive_data_clear)
3.2、串口检测程序
检测电脑上所有串口,实现代码如下所示:
-
# 串口检测
-
def port_check(self):
-
# 检测所有存在的串口,将信息存储在字典中
-
self.Com_Dict = {}
-
port_list = list(serial.tools.list_ports.comports())
-
self.Combobox1.clear()
-
for port in port_list:
-
self.Com_Dict["%s" % port[0]] = "%s" % port[1]
-
self.Combobox1.addItem(port[0])
-
# 无串口判断
-
if len(self.Com_Dict) == 0:
-
self.Combobox1.addItem("无串口")
3.3、 设置及打开串口程序
检测到串口后进行配置,打开串口,并且启动定时器一直接收用户输入,实现代码如下所示:
。。。。。。。。。。。。。。。。。
版权原因,完整文章,请参考如下:Python Qt GUI设计:做一款串口调试助手(实战篇—1)