STM32+Python用XMODEM协议升级固件之Python开发升级工具

本章节讲述基于Pycharm环境,使用Python开发XMODEM软件升级工具的过程。阅读本章节需要具备一定的Python基础,故本章节不在讲述Pycharm安装和Python基础语法,而Python的库如何安装,使用百度搜索就可以了。开发的Python版本是V3.8,Windows是Win7。希望阅读完本文章的博友能大概了解如何在Python环境适应PYQT5库设计Windows窗口界面,当然能动手操作效果最佳。

一: 基于PYQT5使用Qt Designer设计界面

PYQT5是一款用于开发图形界面的库,可以方便的开发各种复杂的界面,但XMODEM升级工具的界面比较简单,因此本小节能介绍到的PYQT5的功能不多,希望对初学者起到抛砖引玉的作用。

1.1: 通过Python调出Qt Designer

1.2: 创建新的窗口

Qt Designer出来后,选择Widget,然后点击创建即可。

说明下: Main Window用于创建带有菜单的主窗口,而Widget创建无菜单的主窗口。

创建完成后,把鼠标放在新窗口的边上,会出现箭头,可以通过箭头调整窗口的大小。

把完新窗口保存到文件夹,并命名为Layout.ui。

1.3: 把Layout.ui转换成代码

转成代码后,可以看到,Layout.py和相关的代码

1.4: 添加显示窗口的代码

点击右键运行代码,未能看懂窗口,那是因为还未添加显示代码。

添加显示窗口的代码,代码中绿色部分。

from PyQt5 import QtCore, QtGui, QtWidgets

class UiMainWindow(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(673, 548)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MyMainWindow = QtWidgets.QMainWindow()
    MyUi = UiMainWindow()
    MyUi.setupUi(MyMainWindow)   
    MyMainWindow.show()
    sys.exit(app.exec_())        # app.exec_()是类中的一个循环监听方法

点击运行代码,出现空白的窗口,如下图。

主窗口的左上角的“Form”,可以在QtDesigner修改,修改方法如下:

鼠标随便电解QtDesigner界面中主窗口,在窗口右边,找到windowTitle,修改名称。

1.5: 显示窗口代码与Layout布局代码分离

在设计主窗口界面时,会出现添加新功能,然后同步至Python,再转换成Python代码;如果Layout的代码与显示主窗口的未分离,每次转换成Python代码时,都是把显示主窗口代码弄丢,很时烦人,所以这两部分代码必须要分离。分离方法如下。

1: 新建一个Main.py的文件。

后续所有逻辑功能的代码都在Main.py里实现,当然也可以把各种不同的逻辑分到多个文件。因为XMODEM升级工具比较简单,所以没必要这么做。

1.6: 显示窗口的代码放到Main.py

在Main.py里创建一个新的类,用于实现各种逻辑,在类的初始化里实现窗口显示。

from Layout import Ui_MainWindow
from PyQt5 import QtWidgets,QtGui,QtCore

class MyMainWindow(QtWidgets.QMainWindow, Ui_MainWindow):    # 从Layout文件中,继承Ui_MainWindow类

    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__(parent)           # 使用父类初始化
        self.setupUi(self)                                   # 初始化QDialog界面
        #self.myWindowInit()                                 # 所有窗口初始化
        return

# *************************************************************************************


# 逻辑代码区


# *************************************************************************************

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    myUiWindow = MyMainWindow()
    myUiWindow.show()
    sys.exit(app.exec_())                       # app.exec_()是类中的一个循环监听方法

同时,需要把Layout.py里的显示代码注释掉,否则会报错。

刚才修改了主窗口名称为“XMODEM”,保存后,在Pychar重新转换成python代码后,上图注释部分已消失,运行“Main.py”,出现同样的窗口。

1.7: 设计自己喜欢的窗口界面

Qt Designer设计窗口界面非常友好,需要什么样的功能,直接把鼠标按住左边的功能框,拖到右边的窗口即可。在把功能框拖到右边时,Qt Designer直接建立一个类,注意在Python中,所有的信息都是以类的形式存在,小到一个字节,大到主窗口。

XMODEM需要以下功能框:

1: 标签Label,标识各种信息,对应Qt Designer左边窗口的Display Widgets中的Label。如果有多的标签,将按序号先后顺序出现,下图。

2: 选择框Combo Box,对应Qt Designer左边窗口的Input Widgets中的Combo Box。如果有多的选择框,将按序号先后顺序出现,下图。

3: 按钮Button,对应Qt Designer左边窗口的Buttons中的Push Button。如果有多的按钮,将按序号先后顺序出现,下图。

4: 进度显示条Progress Bar,对应Qt Designer左边窗口的Display Widgets中的Progress Bar。如果有多的进度显示条,将按序号先后顺序出现,下图。

5: 单行输入框Line Edit,对应Qt Designer左边窗口的Input Widgets中的Line Edit。如果有多的单行输入框,将按序号先后顺序出现,下图。

6: 多行文本显示框Text Browser,对应Qt Designer左边窗口的Input Widgets中的Text Browser。如果有多的单行输入框,将按序号先后顺序出现,下图

各个功能框可以行对齐或者列对齐等方式对齐,还可以把各个功能框合并,合并后的功能框再对齐。

所有的功能框都可以设定默认值,Python代码运行后,功能框的数值都是以设定的默认值出现。

至此,XMODEM所有的功能框添加和设计完成。

7: 保存窗口,设计好的界面转换成python代码,Layout.py出现新的代码,运行Main.py,结果如下。

1.8: 显示窗口的代码放到Main.py

Layout.py源代码:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(obj
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hhccxw

你的肯定是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值