文章目录
- [1 环境搭建](#1 环境搭建)
-
- [1.1 安装PyQt5](#1.1 安装PyQt5)
-
- [1.1.1 安装](#1.1.1 安装)
- [1.1.2 验证](#1.1.2 验证)
- [1.2 安装PyInstaller](#1.2 安装PyInstaller)
- [1.3 安装PySide](#1.3 安装PySide)
- [1.4 安装InnoSetup](#1.4 安装InnoSetup)
- [1.5 PyCharm配置外部工具](#1.5 PyCharm配置外部工具)
-
- [1.5.1 PyCharm配置PyLUpdate](#1.5.1 PyCharm配置PyLUpdate)
- [1.5.2 PyCharm配置QtLinguist](#1.5.2 PyCharm配置QtLinguist)
- [1.5.3 PyCharm配置QtDesigner](#1.5.3 PyCharm配置QtDesigner)
- [1.5.4 PyCharm配置PyUIC](#1.5.4 PyCharm配置PyUIC)
- [1.5.5 PyCharm配置PyRCC](#1.5.5 PyCharm配置PyRCC)
- [1.5.6 外部工具使用](#1.5.6 外部工具使用)
-
- [1.5.6.1 PyRCC使用](#1.5.6.1 PyRCC使用)
- [1.5.6.2 PyUIC使用](#1.5.6.2 PyUIC使用)
- [1.5.6.3 Qt Creator使用](#1.5.6.3 Qt Creator使用)
- [1.5.6.4 PylUpdate使用](#1.5.6.4 PylUpdate使用)
- [2 Hello World程序](#2 Hello World程序)
-
- [2.1 简单直接使用UI文件](#2.1 简单直接使用UI文件)
- [2.2 使用信号和槽](#2.2 使用信号和槽)
- [2.3 不同线程之间的信号和槽](#2.3 不同线程之间的信号和槽)
- [3 为UI文件生成对应的类文件](#3 为UI文件生成对应的类文件)
-
- [3.1 通过pyuic工具为UI文件生成对应的类](#3.1 通过pyuic工具为UI文件生成对应的类)
- [3.2 创建Window类](#3.2 创建Window类)
- [4 PyRcc转换qrc文件为py文件](#4 PyRcc转换qrc文件为py文件)
- [5 PyInstaller打包应用](#5 PyInstaller打包应用)
- [6 InnoSetup制作安装包](#6 InnoSetup制作安装包)
-
- [6.1 修改脚本文件](#6.1 修改脚本文件)
- [6.2 运行InnoSetup生成Installer](#6.2 运行InnoSetup生成Installer)
- 参考资料
1 环境搭建
图 1-1 各工具之间关系
本章节主要介绍图1-1中涉及到的各种工具的安装和配置。
1.1 安装PyQt5
1.1.1 安装
python
pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
1.1.2 验证
在IPython中运行如下程序:
python
# 如果执行成功,没有任何错误提示,则表明环境搭建成功
from PyQt5 import QtWidgets
# 当然也可以查看PyQt版本
from PyQt5.QtCore import *
print(QT_VERSION_STR)
1.2 安装PyInstaller
PyInstaller是将python程序打包成exe文件的工具。
安装命令如下:
python
pip install pyinstaller
1.3 安装PySide
因为我们使用的是PyQt5,所以安装pyside2,在使用的时候也是import PySide2.
安装命令如下:
python
pip install pyside2
1.4 安装InnoSetup
下一步下一步,傻瓜式安装。
1.5 PyCharm配置外部工具
1.5.1 PyCharm配置PyLUpdate
设置: File ------> Settings ------> Tools ------> External Tools
Name: PylUpdate
填自己环境的pylupdate5.exe路径
Program: D:\Virtualenv\qt_env\Scripts\pylupdate5.exe
填自己存放.ts文件的路径,一般为:$FileName$ -ts $FileName$.ts
Arguments: $FileName$ -ts $ProjectFileDir$\qms\$FileName$.ts
Working directory: $FileDir$
1.5.2 PyCharm配置QtLinguist
Name: QtLinguist
填自己环境的linguist.exe路径
Program: D:\Virtualenv\qt_env\Lib\site-packages\qt5_applications\Qt\bin\linguist.exe
Working directory: $FileDir$
1.5.3 PyCharm配置QtDesigner
配置外部工具
Program:QtDesigner的安装路径
Working directory:QtDesigner的exe文件所在的目录。
1.5.4 PyCharm配置PyUIC
同样的操作来配置外部工具。
Arguments:-o $FileNameWithoutExtension$.py
Working directory: $FileDir$
1.5.5 PyCharm配置PyRCC
参数为:$FileName$ -o $FileNameWithoutExtension$_rc.py
工作目录为:$FileDir$
1.5.6 外部工具使用
1.5.6.1 PyRCC使用
同PyUIC。
1.5.6.2 PyUIC使用
选中文件,右键,选择PyUIC,会生成py文件。
PS E:\IMTFlash> .\venv\Scripts\python.exe .\venv\Scripts\pyuic5.exe .\programmer\designer\debugsecuritywidget.ui -o .\programmer\designer\debugsecuritywidget.py
1.5.6.3 Qt Creator使用
点击QtCreator之后会直接拉起Creator应用程序,可以在上面创建或者编辑UI文件。
1.5.6.4 PylUpdate使用
更新工程文件中指定的所有的源文件:
.\venv\Scripts\python.exe .\venv\Scripts\pylupdate5.exe .\programmer\transource.txt
为一个py文件生成ts文件
.\venv\Scripts\python.exe .\venv\Scripts\pylupdate5.exe .\programmer\designer\debugsecuritywidget.py -ts .\programmer\resource\lang\lang_ch.ts
2 Hello World程序
2.1 简单直接使用UI文件
可以直接load ui文件,控件的objectName就是属性名,拿到控件对象之后就可以操作控件了。
示例代码如下。
python
def __init_ui(self):
self.ui = uic.loadUi("./mainwindow.ui");
print(type(self.ui))
print(self.ui.__dict__);
print(self.ui.label.text());
2.2 使用信号和槽
python
def __init_ui(self):
self.ui = uic.loadUi("./mainwindow.ui");
print(type(self.ui))
print(self.ui.__dict__);
print(self.ui.label.text());
loginButton = self.ui.loginButton;
loginButton.clicked.connect(self.onLogin)
def onLogin(self):
userName = self.ui.lineEdit.text();
passWord = self.ui.lineEdit_2.text();
2.3 不同线程之间的信号和槽
python
def __init_thread(self):
# 信号和槽绑定
self.login_thread.start_login_signal.connect(self.login_thread.do_login);
self.login_thread.start();
python
import json
import time
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QMessageBox
USER_NAME_KEY = "user_name"
PASSWORD_KEY = "password"
class LoginThread(QThread):
# 自定义信号
start_login_signal = pyqtSignal(str)
def __init__(self):
super().__init__()
def do_login(self, login_info):
login_info_dict = json.loads(login_info)
print(login_info_dict.get(USER_NAME_KEY))
print(login_info_dict.get(PASSWORD_KEY))
QMessageBox.information(None, "Login info", login_info);
def run(self):
while True:
print("log in thread running..................")
time.sleep(1)
3 为UI文件生成对应的类文件
3.1 通过pyuic工具为UI文件生成对应的类
命令行方式:pyuic5 -o mainwindow.py .\mainwindow.ui
生成的就是UI类,类似于C++中的UI类
3.2 创建Window类
代码 3-1 Python的window类
python
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from mainwindow_ui import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
代码3-1中所示代码类似于代码3-2中所示的C++的Window类。
代码3-2
cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
4 PyRcc转换qrc文件为py文件
pyrcc5.exe .\res\res.qrc -o res.py
import 相应的py文件之后就可以在代码中使用QT的资源定位路径,如":/icons/start.png".
注意:使用linguist等工具修改了qm文件等使用PyQt资源管理的文件之后,要重新生成rc.py文件。因为PyQt代码中不感知qm文件等资源文件,只会感知rc.py文件。
5 PyInstaller打包应用
运行命令:pyinstaller -F .\main.py -w
,就在dist目录中生成了exe文件。
在代码工程目录下执行如下命令:
PS E:\Tools\Test> .\venv\Scripts\python.exe .\venv\Scripts\pyinstaller.exe -D .\main.py -w -i .\main.ico
-D表示exe依赖的库文件以文件的形式组织到目录中。
-F 表示所有的依赖文件也打包到exe文件中。
6 InnoSetup制作安装包
6.1 修改脚本文件
修改iss文件,配置应用名称等等。
6.2 运行InnoSetup生成Installer
Run,生成安装包,并拉起安装包进行应用安装。
参考资料
[1] https://blog.csdn.net/weixin_43361136/article/details/124786759
[2] 弹出消息框:https://blog.csdn.net/lb0737/article/details/84318847
[3] PyQt5安装:https://blog.csdn.net/yfdgbfvd/article/details/122914885
[4] https://www.bilibili.com/video/BV1LT4y1e72X?p=31\&vd_source=f4dcb991bbc4da0932ef216329aefb60
[5] 配置外部工具:https://blog.csdn.net/wenqiang1208/article/details/73656399
[6] PyQt使用UI文件:https://www.cnblogs.com/linyfeng/p/11223707.html
[7] 使用QT Designer设计PyQt5 GUI:https://www.pythonguis.com/tutorials/first-steps-qt-creator/
[8] PyInstaller安装和使用:https://c.biancheng.net/view/2690.html
[9] 入门课件:https://doc.itprojects.cn/0001.zhishi/python.0008.pyqt5rumen/index.html#/README
[10] PySide简介、安装和使用:https://blog.csdn.net/qq_41185868/article/details/126895643
[11] PyRcc使用:https://blog.csdn.net/qq_42588821/article/details/104222921
[12] PyRcc配置外部工具:https://blog.csdn.net/xiong_xin/article/details/103996057
[12] https://doc.qt.io/qtforpython-6/tutorials/basictutorial/qrcfiles.html
[13] 配置QT语言家https://blog.csdn.net/weixin_43868038/article/details/115249711
[14] https://blog.csdn.net/weixin_43868038/article/details/115249711
[15] 软件打包发布:http://wiki.immorta.com:8090/pages/viewpage.action?pageId=10224402
[16] https://www.pythonguis.com/tutorials/qtableview-modelviews-numpy-pandas/
[17] PyUIC exit code 1:https://blog.csdn.net/LWD19981223/article/details/127716263
[18] pylupdate manual:https://manpages.org/pylupdate