用QT来做工具

2021-09-02 15:47:47 浏览数 (1)

最近做了一些工具,没有搭建在服务器上, 又要给别人用,因为是在windows上,就考虑用pyqt来设计界面和打包。python是有很多界面的框架,像TK等,个人觉得Qt是最简单的,拖拽就可以了,省掉了很多编程。 以前用过QT,后面忘记了,最近又要用,于是找了几篇入门的文章,自己也没有怎么看,就先弄起来了。 https://realpython.com/qt-designer-python/#connecting-signals-and-slots https://www.tutorialspoint.com/pyqt/pyqt_using_qt_designer.htm https://www.cnblogs.com/linyfeng/p/11223707.html 建议使用国内源,进行快速安装:

代码语言:javascript复制
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5-tools

PyCharm配置环境 启动PyCharm后,新建一个PyQt5空项目后,需要配置Qt Designer、pyuic、pyrcc工具,相关配置方法如下:

Qt Designer Qt Designer 是通过拖拽的方式放置控件,并实时查看控件效果进行快速UI设计。

最终生成.ui文件(实质上是XML格式的文件),可以通过pyuic5工具转换成.py文件。

在Pycharm中,依次打开 File - Settings - Tools - External Tools,点击 Create Tool,配置如下:

代码语言:javascript复制
Name: QtDisigner
Program : C:softwareLibsite-packagesqt5_applicationsQtbindesigner.exe # 当前designer目录,请根据实际修改
Working directory: $FileDir$

PyUIC配置 PyUIC主要是把Qt Designer生成的.ui文件换成.py文件。

在Pycharm中,依次打开 File - Settings - Tools - External Tools,点击 Create Tool,配置如下:

代码语言:javascript复制
Name: PyUIC
Program : C:Python38python.exe # 当前Python目录,请根据实际修改
Arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
Working directory: $FileDir$

PyRCC配置 PyRCC主要是把编写的.qrc资源文件换成.py文件。

在Pycharm中,依次打开 File - Settings - Tools - External Tools,点击 Create Tool,配置如下:

代码语言:javascript复制
Name: PyRCC
Program : C:Python38Scriptspyrcc5.exe # 当前rcc工具目录,请根据实际修改
Arguments: $FileName$ -o $FileNameWithoutExtension$_rc.py
Working directory: $FileDir$

设计界面UI 打开Qt Designer,可参考下图设计

拖拽布置好控件以后,就可以保存了。

转换.ui文件为.py文件 在PyCharm中选中Weather.ui文件后,右键选择 External Tools - PyUIC,即可生成Weather.py,实际运行命令如下:

C:Python38python.exe -m PyQt5.uic.pyuic tool.ui -o tool.py 可以用工具一键生成。

界面与业务逻辑分离实现

这一步主要实现业务逻辑,也就是点击登录和退出按钮后程序要执行的操作。为了后续维护方便,采用界面与业务逻辑相分离来实现。也就是通过创建主程序调用界面文件方式实现。这有2个好处。第1就是实现逻辑清晰。第2就是后续如果界面或者逻辑需要变更,好维护。新建call_tool.py文件程序,调用tool.py文件。

代码语言:javascript复制
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'connect_me.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
#导入程序运行必须模块
import sys
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import QApplication, QMainWindow
#导入designer工具生成的login模块
from login import Ui_Form

class MyMainForm(QMainWindow, Ui_Form):
    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)
        self.setupUi(self)

if __name__ == "__main__":
    #固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
    app = QApplication(sys.argv)
    #初始化
    myWin = MyMainForm()
    #将窗口控件显示在屏幕上
    myWin.show()
    #程序运行,sys.exit方法确保程序完整退出。
    sys.exit(app.exec_())

到这里,界面实现和业务主程序已经写好了。但是现在具体业务功能逻辑还未实现。需要对登录和退出的按钮点击执行相对应的操作。

添加信号和槽,实现业务逻辑 实现部分见代码注释。这里主要添加如下两行命令配置信号和槽的关系。信号和槽的创建和原理下文描述。这里可以参照添加即可。

登录按钮:self.login_Button.clicked.connect(self.display)

退出按钮:self.cancel_Button.clicked.connect(self.close)

详细代码如下:

代码语言:javascript复制
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'connect_me.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
#导入程序运行必须模块
import sys
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import QApplication, QMainWindow
#导入designer工具生成的login模块
from login import Ui_Form

class MyMainForm(QMainWindow, Ui_Form):
    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)
        self.setupUi(self)
        #添加登录按钮信号和槽。注意display函数不加小括号()
        self.login_Button.clicked.connect(self.display)
        #添加退出按钮信号和槽。调用close函数
        self.cancel_Button.clicked.connect(self.close)
    def display(self):
        #利用line Edit控件对象text()函数获取界面输入
        username = self.user_lineEdit.text()
        password = self.pwd_lineEdit.text()
        #利用text Browser控件对象setText()函数设置界面显示
        self.user_textBrowser.setText("登录成功!n"   "用户名是: "  username  ",密码是:"  password)

if __name__ == "__main__":
    #固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
    app = QApplication(sys.argv)
    #初始化
    myWin = MyMainForm()
    #将窗口控件显示在屏幕上
    myWin.show()
    #程序运行,sys.exit方法确保程序完整退出。
    sys.exit(app.exec_())

业务可以分开写,这样页面变化,或者逻辑变化,改动也就不大了。

用户登录显示程序界面和逻辑都实现了。下来就是要推广使用了。不是所有人电脑上都安装有python软件或者对应的python版本以及PyQt5工具。那么如何让程序在这些未安装python软件的机子上运行呢?可以使用pyinstaller工具将程序打包成.exe文件 先安装pyinstaller

代码语言:javascript复制
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

然后打包:

代码语言:javascript复制
pyinstaller.exe -F call_login.py -w (-w表示去掉控制台窗口显示)

因为我的是有输出,需要显示控制台,所以这个命令可以不用。 因为是业务分离,所以打包的时候,要将多个文件打包到一起

代码语言:javascript复制
pyinstaller.exe -F call_login.py -p a.py -p b.py

有多少个文件,后面就可以加-p 当然,可以把文件放到文件夹里,用一个-p就可以了。

如果想加图片,使用参数-i。如命令:

代码语言:javascript复制
pyinstaller -F -i tupianqq.ico ccc.py。文件后缀名必须是.ico 这样就解决了

欲善其事 必先利其器,这样工作起来就方便多了。

0 人点赞