PyQt学习笔记

文章目录

  • 1 环境搭建
    • 1.1 安装PyQt5
      • 1.1.1 安装
      • 1.1.2 验证
    • 1.2 安装PyInstaller
    • 1.3 安装PySide
    • 1.4 安装InnoSetup
    • 1.5 PyCharm配置外部工具
      • 1.5.1 PyCharm配置PyLUpdate
      • 1.5.2 PyCharm配置QtLinguist
      • 1.5.3 PyCharm配置QtDesigner
      • 1.5.4 PyCharm配置PyUIC
      • 1.5.5 PyCharm配置PyRCC
      • 1.5.6 外部工具使用
        • 1.5.6.1 PyRCC使用
        • 1.5.6.2 PyUIC使用
        • 1.5.6.3 Qt Creator使用
        • 1.5.6.4 PylUpdate使用
  • 2 Hello World程序
    • 2.1 简单直接使用UI文件
    • 2.2 使用信号和槽
    • 2.3 不同线程之间的信号和槽
  • 3 为UI文件生成对应的类文件
    • 3.1 通过pyuic工具为UI文件生成对应的类
    • 3.2 创建Window类
  • 4 PyRcc转换qrc文件为py文件
  • 5 PyInstaller打包应用
  • 6 InnoSetup制作安装包
    • 6.1 修改脚本文件
    • 6.2 运行InnoSetup生成Installer
  • 参考资料

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/291039.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“ManageEngine荣获Gartner SIEM客户选择四连冠“

我们非常激动地宣布&#xff0c;ManageEngine已经连续第四次被认定为Gartner Peer Insights‘Voice of the Customer’&#xff1a;安全信息与事件管理&#xff08;SIEM&#xff09;中的客户选择。这不仅是对我们卓越SIEM解决方案承诺的肯定&#xff0c;也延续了ManageEngine在…

前端三剑客——HTML5+CSS3+JavaScript

核心技术●实战训练营●项目实战&#xff08;微视频版&#xff09;   《前端三剑客——HTML5CSS3JavaScript》采用“核心技术→实战训练营→企业级项目实践”的结构和“由浅入深&#xff0c;由深到精”的模式进行讲解。 全书科学设置七大阶段由浅入深循序渐进&#xff0c;为解…

linux系统编程笔记

linux系统编程 1. gcc四个阶段2. 动态库 静态库2.1 制作静态库2.2 头文件守卫2.3 制作动态库 3. gdb调试工具基础指令其他指令 4. Makefile最终成果一个小作业 5. 系统编程阶段open函数read write函数阻塞和非阻塞lseek函数设置文件读写偏移量传出参数和传入参数(c常用)5.2 文件…

SQL Yog 连接MySQL的时候出现 错误码 2058的问题

查看报错信息&#xff1a; 这个问题是出现在&#xff0c;我使用sql Yog连接MySQL数据库的时候出现的错误。 问题分析&#xff1a; 原因可能是MySQL加密方式&#xff0c;不允许本地访问&#xff0c; 解决办法&#xff1a; 1&#xff0c;window r 输入cmd进入黑窗口 2&#xff…

石头剪刀布游戏 - 华为OD统一考试

OD统一考试 分值: 100分 题解: Java / Python / C++ 题目描述 石头剪刀布游戏有 3 种出拳形状: 石头、剪刀、布。分别用字母 A,B,C 表示游戏规则: 出拳形状之间的胜负规则如下: A>B; B>C; C>A; 左边一个字母,表示相对优势形状。右边一个字母,表示相对劣势形状。…

最优化理论期末复习笔记 Part 2

数学基础线性代数 从行的角度从列的角度行列式的几何解释向量范数和矩阵范数 向量范数矩阵范数的更强的性质的意义 几种向量范数诱导的矩阵范数 1 范数诱导的矩阵范数无穷范数诱导的矩阵范数2 范数诱导的矩阵范数 各种范数之间的等价性向量与矩阵序列的收敛性 函数的可微性与展…

『C++成长记』运算符重载

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、运算符重载 &#x1f4d2;1.1两个日期大小的比较 &#x1f4d2;1.2运算符重载…

Navicat for Mysql怎么执行创建表的脚本

Navicat for Mysql怎么执行创建表的脚本 Navicat 怎么执行sql文件 Navicat 执行创建表语句 Navicat 执行sql语句 Navicat 怎么创建表语句 1、打开Navicat数据库管理工具&#xff1b; 2、点击菜单栏上的“工具”&#xff0c;选择“命令列界面”&#xff1b; 打开了命令列界面…

多肉植物,预计到2025我国市场规模将达到140亿元人民币

多肉植物是一种新兴的盆栽植物&#xff0c;由于造型各异、易于养殖、低维护难度等优点&#xff0c;在全球市场和中国市场受到了越来越多消费者的追捧。全球市场分析 从全球市场来看&#xff0c;多肉植物市场规模正在逐步扩大。各种形态各异的多肉植物受到消费者的喜爱&#xff…

魔术表演Scratch-第14届蓝桥杯Scratch省赛真题第1题

1.魔术表演&#xff08;20分&#xff09; 评判标准&#xff1a; 4分&#xff1a;满足"具体要求"中的1&#xff09;&#xff1b; 8分&#xff1a;满足"具体要求"中的2&#xff09;&#xff1b; 8分&#xff0c;满足"具体要求"中的3&#xff09…

ArrayList集合综合练习

文章目录 题目1训练目标训练提示训练步骤参考答案 题目2训练目标训练提示参考方案训练步骤参考答案 题目3训练目标训练提示参考方案训练步骤参考答案 题目4&#xff08;综合&#xff09;训练目标训练提示参考方案训练步骤参考答案 题目1 现有如下字符串元素&#xff1a;[“aaa…

ocrmypdf_pdf识别

安装 安装说明 https://ocrmypdf.readthedocs.io/en/latest/installation.html#native-windows提到需要的软件&#xff1a; Python 3.7 (64-bit) or later Tesseract 4.0 or later Ghostscript 9.50 or later 安装 ocrmypdf pip install ocrmypdf 添加语言包 https://oc…

科研+临床观摩|牙科医生公派美国从事访问学者交流

很多临床医学专业的访问学者希望在访学从事科研的同时&#xff0c;能到医院进行临床观摩。对于这些申请者的要求&#xff0c;我们会尽量满足。本案例中的T医生&#xff0c;口语较弱&#xff0c;担心英语面试&#xff0c;最终我们为其取得了田纳西大学健康科学中心的邀请函&…

【QT】QStandardItemModel类的应用介绍

目录 1 概述 2 常用方法 3 QStandardItemModel的使用 3.1 界面设计与主窗口类定义 3.2 系统初始化 3.3 从文本文件导入数据 3.4 数据修改 3.5 单元格格式设置 3.6 数据另存为文件 1 概述 QStandardItemModel是标准的以项数据&#xff08;itemdata&#xff09;为基础的…

【Linux】set命令使用

set命令 设置所使用shell的执行方式&#xff0c;可依照不同的需求来做设置。 语法 set [参数]选项及作用 执行令 &#xff1a; man set 执行命令结果 参数 -a  标示已修改的变量&#xff0c;以供输出至环境变量。-b  使被中止的后台程序立刻回报执行状态。-C  转向所…

Android开发中“真正”的仓库模式

原文地址&#xff1a;https://proandroiddev.com/the-real-repository-pattern-in-android-efba8662b754原文发表日期&#xff1a;2019.9.5作者&#xff1a;Denis Brandi翻译&#xff1a;tommwq翻译日期&#xff1a;2024.1.3 Figure 1: 仓库模式 多年来我见过很多仓库模式的实…

liunx操作系统基础及进阶

一、基础入门 1、Linux系统简介 什么是Liunx&#xff1f; Linux在设计之初&#xff0c;是一个基于POSIX的多用户、多任务并且支持多线程和多CPU的操作系统&#xff0c;它是由世界各地成千上万的程序员设计和开发实现&#xff1b; 在当今社会&#xff0c;Linux 系统主要被应…

史上最细,13年老鸟总结-性能测试7大关键点,一篇打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、测试环境的鉴定…

MQTT基础下载使用

1.下载MQTT(MQTT官网) 下载完后在bin目录下启动cmd 控制台输入emqx start&#xff0c;注意&#xff0c;此时控制台是没有反应的&#xff0c;就回你个D&#xff1a;\EMQX。其实已经打开了。 打开桌面上的MQTTX 并新建连接 这是测试的数据 我订阅了一个test1的订阅 并且我发布…

跑步中位数

title: 跑步中位数 date: 2024-01-04 15:47:51 tags: 对顶堆 catefories: 算法进阶指南 题目大意 解题思路 动态维护中位数问题。可以建立两个二叉堆&#xff0c;一个大顶堆一个小顶堆&#xff0c;在依次读入整数序列的过程中&#xff0c;设当前序列长度为 M M M,我们始终保持…