PyQt学习笔记

发布时间:2024年01月04日

1 环境搭建

在这里插入图片描述
图 1-1 各工具之间关系
本章节主要介绍图1-1中涉及到的各种工具的安装和配置。

1.1 安装PyQt5

1.1.1 安装

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

1.1.2 验证

在IPython中运行如下程序:

# 如果执行成功,没有任何错误提示,则表明环境搭建成功
from PyQt5 import QtWidgets

# 当然也可以查看PyQt版本
from PyQt5.QtCore import *
print(QT_VERSION_STR)

1.2 安装PyInstaller

PyInstaller是将python程序打包成exe文件的工具。
安装命令如下:

pip install pyinstaller

1.3 安装PySide

因为我们使用的是PyQt5,所以安装pyside2,在使用的时候也是import PySide2.
安装命令如下:

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就是属性名,拿到控件对象之后就可以操作控件了。

示例代码如下。

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 使用信号和槽

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 不同线程之间的信号和槽

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)

3 为UI文件生成对应的类文件

3.1 通过pyuic工具为UI文件生成对应的类

命令行方式:pyuic5 -o mainwindow.py .\mainwindow.ui
生成的就是UI类,类似于C++中的UI类

3.2 创建Window类

代码 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 <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

文章来源:https://blog.csdn.net/kaikai_sk/article/details/134953713
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。