PyQt学习笔记

文章目录

  • [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

相关推荐
黑叶白树1 小时前
简单的签到程序 python笔记
笔记·python
@小博的博客1 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
幸运超级加倍~2 小时前
软件设计师-上午题-15 计算机网络(5分)
笔记·计算机网络
南宫生2 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步2 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
love_and_hope3 小时前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
Chef_Chen3 小时前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
芊寻(嵌入式)3 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
准橙考典3 小时前
怎么能更好的通过驾考呢?
人工智能·笔记·自动驾驶·汽车·学习方法
hong1616884 小时前
跨模态对齐与跨领域学习
学习