图 1-1 各工具之间关系
本章节主要介绍图1-1中涉及到的各种工具的安装和配置。
pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
在IPython中运行如下程序:
# 如果执行成功,没有任何错误提示,则表明环境搭建成功
from PyQt5 import QtWidgets
# 当然也可以查看PyQt版本
from PyQt5.QtCore import *
print(QT_VERSION_STR)
PyInstaller是将python程序打包成exe文件的工具。
安装命令如下:
pip install pyinstaller
因为我们使用的是PyQt5,所以安装pyside2,在使用的时候也是import PySide2.
安装命令如下:
pip install pyside2
下一步下一步,傻瓜式安装。
设置: 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$
Name: QtLinguist
填自己环境的linguist.exe路径
Program: D:\Virtualenv\qt_env\Lib\site-packages\qt5_applications\Qt\bin\linguist.exe
Working directory: $FileDir$
配置外部工具
Program:QtDesigner的安装路径
Working directory:QtDesigner的exe文件所在的目录。
同样的操作来配置外部工具。
Arguments:-o $FileNameWithoutExtension$.py
Working directory: $FileDir$
参数为:$FileName$ -o $FileNameWithoutExtension$_rc.py
工作目录为:$FileDir$
同PyUIC。
选中文件,右键,选择PyUIC,会生成py文件。
PS E:\IMTFlash> .\venv\Scripts\python.exe .\venv\Scripts\pyuic5.exe .\programmer\designer\debugsecuritywidget.ui -o .\programmer\designer\debugsecuritywidget.py
点击QtCreator之后会直接拉起Creator应用程序,可以在上面创建或者编辑UI文件。
更新工程文件中指定的所有的源文件:
.\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
可以直接load ui文件,控件的objectName就是属性名,拿到控件对象之后就可以操作控件了。
示例代码如下。
def __init_ui(self):
self.ui = uic.loadUi("./mainwindow.ui");
print(type(self.ui))
print(self.ui.__dict__);
print(self.ui.label.text());
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();
def __init_thread(self):
# 信号和槽绑定
self.login_thread.start_login_signal.connect(self.login_thread.do_login);
self.login_thread.start();
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)
命令行方式:pyuic5 -o mainwindow.py .\mainwindow.ui
生成的就是UI类,类似于C++中的UI类
代码 3-1 Python的window类
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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
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;
}
pyrcc5.exe .\res\res.qrc -o res.py
import 相应的py文件之后就可以在代码中使用QT的资源定位路径,如“:/icons/start.png”.
注意:使用linguist等工具修改了qm文件等使用PyQt资源管理的文件之后,要重新生成rc.py文件。因为PyQt代码中不感知qm文件等资源文件,只会感知rc.py文件。
运行命令: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文件中。
修改iss文件,配置应用名称等等。
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