嵌入式参数配置工具(python+pylink)(四)--pyqt界面设计

背景:设备中包含大量参数,需要配合非程序员同事修改参数进行测试。没有可用的人机交互接口,只能通过串口AT指令或烧录的方式访问。

目标是做成一款人人可以上手的工具,快速对设备进行自定义的配置。

目录

开发环境配置

pyqt安装

配置pycharm

QtDesigner

PyUIC

QtDesigner制作GUI界面

常用控件

信号槽

ui文件转换成py文件

窗口实现

初始化和退出

窗口布局不适配问题

弹出窗口选择文件


系列文章:

产品参数配置工具(python+pylink)(一)--方案设计-CSDN博客

产品参数配置工具(python+pylink)(二)--bin文件生成和调用-CSDN博客

产品参数配置工具(python+pylink)(三)--pylink的使用-CSDN博客

前文已经将小工具的基本功能构建的差不多,最后需要做一个人机交互界面,方便用户傻瓜式操作使用。了解了一些python框架,决定使用资料众多,且容易上手的pyqt来做这个界面。搭配pycharm的小工具,比较方便,不需要手动调整控件位置尺寸,拖拖拽拽即可。

开发环境配置

pyqt安装

pip install PyQt5
pip install pyqt5-tools
国内源:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5-tools

配置pycharm

有两个小工具,是方便pyqt快速构造GUI界面的神器,需要在pycharm中先配置一下。

QtDesigner

用于拖拽控件构造GUI界面,生成的是.ui文件。

在Pycharm中,打开 File - Settings - Tools - External Tools,点击小加号(+),在弹出窗口中配置工具名称,可执行文件路径,工作目录等信息。若不确定可执行文件目录在哪里,可以用everything搜索一下。

PyUIC

用于把.ui文件转换成.py文件。

和QtDesigner一样配置到external tool中,

arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py

调用时自动用.ui的文件名给生成的.py文件命名

QtDesigner制作GUI界面

在PyCharm主界面,依次点击 Tools - External Tools - QtDisigner,即可启动Qt Disigner

常用控件
Label

简单的显示控件,一般用来显示不需要改变的数据。用来放可变数据时的问题是,如果内容太长,可能会超出窗口。

LineEdit

可做输入可做输出,只能单行输入输出。

做输出时对比label的好处是如果内容太长,用户可以在窗格中滑动获取到完整内容。缺点是看起来会有一个框,美观性不如label

做输入时,自带了撤销、重做、剪切、粘贴、拖放等功能。

可以检测内容变化,触发action

PushButton

最常见的按钮,不再赘述

ComboBox

下拉菜单,可在菜单中选择内容。增加项目的语句:

self.MCUType.addItem("")
self.MCUType.setItemText(0, "选项一")
TextBrowser

当数据超出显示范围时,会自动生成两个方向的滑动条,可用于log输出

输出可以使用append函数,这样可以向后一直追加。

若希望textbrowers打印彩色字体,可以在内容前后增加语句,例如:

logDisplay.append("<font color='green'>Welcome!</font>")

输出绿色的welcome!到browers中

信号槽

在信号/槽编辑器中可以设置窗口中的信号和槽,发送者发送了什么信号时,接收者执行什么动作。例如上图设置了在按下pushButton这个组件时,对话框会执行accept这个函数。生成py文件后,用户可以自行修改accept为自己定义的函数(要求函数在dialog类中定义)。

添加信号/槽的pyqt语句为

self.pushButton.clicked.connect(ConfigBox.accept) #accept改写为自己的函数
ui文件转换成py文件

在PyCharm中选中.ui文件后,右键选择 External Tools - PyUIC,即可生成.py文件

需要注意的是,每次重新生成py文件后,都要手动改写一下信号和槽函数的绑定。这个目前没有发现太好的方法,我个人目前是将工程使用git管理,生成py文件后把对应的行恢复。

生成的py文件中主要是一个ui类,这个类中定义了初始化ui的函数,里面初始化了各个组件的位置,大小,属性配置和信号等内容。

窗口实现

初始化和退出

为窗口新建一个类,在其中定义__init__函数,会在构造的时候调用。该函数中需要做一些变量的初始化工作,调用上文中的初始化界面函数,将gui界面画出来。

from PyQt5.QtWidgets import QApplication, QDialog
import configBoxWindow  #放ui设计的那个py文件

class MainDialog(QDialog):
    def __init__(self, parent=None):
        super(QDialog, self).__init__(parent)
        self.ui = configBoxWindow.Ui_ConfigBox()
        self.ui.setupUi(self)
        self.ui.binPath.setText(output_path)
        self.ui.logDisplay.append("Welcome!")
        global mcu_type
        mcu_type = self.ui.MCUType.currentText()

if __name__ == '__main__':
    myapp = QApplication(sys.argv)
    myDlg = MainDialog()
    myDlg.show()
    myapp.exec_() #等到窗口关闭才会执行这句后续的代码,因此可以在后面加入一些必要的退出指令
    #比如关闭jlink,断开连接等
    sys.exit()
窗口布局不适配问题

是windows的高分屏(高分辨率)缩放问题导致,高分辨率的屏幕如果还应用原本的字符显示方式,会使得字符特别的小。

例如一字,显示方式是n个光点,在高分辨率屏幕上n个光电比正常屏幕要更短一点

所以系统一般会给这种屏幕设置自动放大,我的电脑就默认放大到150%

要解决这个问题,我们可以在main函数最前面增加语句,关闭高分屏的自动缩放,避免窗口在高分屏上有排版布局的问题出现。

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QGuiApplication
QtQGuiApplication.setAttribute(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
弹出窗口选择文件

给按钮通过信号槽增加一个按下后的动作,动作函数如下:

from PyQt5.QtWidgets import QFileDialog 
def getXlsxPath(self):
        #参数分别为,窗口名,打开后的默认路径,可选文件筛选模式
        directory = QFileDialog.getOpenFileName(self, "选择xlsx文件", "./", "*.xlsx")
        #将选择的文件路径显示在lineEdit窗口中
        self.ui.xlsxPath.setText(directory[0])
textBlowser不等函数执行完实时显示

在主界面类中自定义一个printf函数,如下:

def printf(self, mes):
    self.textBrowser.append(mes)  # 在指定的区域显示提示信息
    self.cursot = self.textBrowser.textCursor()
    self.textBrowser.moveCursor(self.cursot.End)
    QtWidgets.QApplication.processEvents()

最后一行必须加上才能实现信息一行实时输出,否则信息会在程序执行结束后才一起输出。

在主程序中,需要输出信息的地方调用这个printf函数即可

参考资料:pyqt手册:  欢迎 | Maicss

上一篇:产品参数配置工具(python+pylink)(三)--pylink的使用-CSDN博客

下一篇:产品参数配置工具(python+pylink)(五)--打包exe-CSDN博客

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值