PyQt学习笔记

news2025/6/8 10:42:09

文章目录

  • 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SCPMA最新研究论文推荐!中国移动玻色量子发布联合研究成果

《中国科学&#xff1a;物理学 力学 天文学》英文版(SCIENCE CHINA Physics, Mechanics & Astronomy, SCPMA)出版中移(苏州)软件技术有限公司闻经纬和钱岭团队与北京玻色量子文凯团队的研究成果&#xff0c;文章题为“Optical experimental solution for the multiway numb…

win10搭建keras深度学习框架

在Win10系统上安装Keras&#xff0c;你可以按照以下步骤进行&#xff1a; 安装Python环境--建议安装Anaconda3&#xff0c;可以从官方网站下载对应版本的安装程序进行安装。一步一步的next就行了。安装完成后把根目录下的scripts目录加入path系统变量。 使用pip命令安装Tensor…

d3dcompiler_43.dll丢失怎么修复?怎么解决

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到d3dcompiler_43.dll文件”。那么&#xff0c;d3dcompiler_43.dll是什么文件&#xff1f;它的作用是什么&#xff1f;如果缺失了该如何修复呢&#xff1f;本文将详细介绍d3dcompiler_…

《Linux系统与网络管理》复习题库---简答题

1、简述这些分区的名字以及各自的作用。 答&#xff1a; /boot 存放内核镜像的地方&#xff0c;这个文件夹独立分区的意义在于降低不能开机的风险。 /根目录&#xff0c;一般采用 ext3 文件系统&#xff0c;分区的容量一定要大于安装软件包的容量。 /usr 多数软件的默认安装的地…

如何对APP进行安全加固

引言 如今&#xff0c;移动应用市场蓬勃发展&#xff0c;APP数量呈现爆炸性增长。随着5G技术的广泛应用&#xff0c;APP的增长趋势持续增强。然而&#xff0c;由于APP的泛滥&#xff0c;网络攻击者的目标也在逐渐转移&#xff0c;数亿的移动互联网用户面临着病毒攻击的威胁&am…

Mysql 重要知识点1(含面试题1)

Mysql 知识点较多&#xff0c;这里涵盖了基本知识点&#xff0c;包括SQL语句 、重要面试题等。后面还有几章Mysql的知识点&#xff0c;分别是刷题总结与进阶优化SQL 面试题等。 目录 Mysql 安装Mysql 重要知识点SQL 重要语句面试题精选 Mysql 安装 1.官网下载mysql5.7版本压缩…

Vue 中的 ref 与 reactive:让你的应用更具响应性(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

张驰咨询:ZENNER真兰标杆展示——2023年六西格玛DMAIC项目出色落下帷幕

告别了旧年&#xff0c;我们跨入了新的一年&#xff01;ZENNER在23年初启动的DMAIC项目在2023年12月25日迎来了总结、收获成果的发布会。 ZENNER真兰集团中国区总裁杨燕明先生&#xff0c;张驰咨询公司的两位精益六西格玛黑带大师专家张驰老师和朱成朝老师&#xff0c;以及真诺…

【教学类-09-04】20240102《游戏棋N*N》数字填写,制作棋子和骰子

作品展示 背景需求&#xff1a; 最近在清理学具材料库&#xff0c;找到一套1年多前的《N*N游戏棋》&#xff0c;把没有用完的棋盘拿出来&#xff0c;&#xff0c;想给大4班换花样&#xff0c;并把它们用掉。 程序代码在这里 【教学类-09-03】20221120《游戏棋10*10数字如何直接…

马蹄集oj赛(双周赛第十八次)

目录 幸运的3 打靶 照亮街道 九次九日九重色 寻找串 竹鼠的白色季节 捉迷藏 好的三连 三角数 买马 可怜的小码哥 花园浇水 高次方程 幸运的3 难度:黄金时间限制: 1秒四占用内存:128M 你有 n 个数&#xff0c;可以将它们两两匹配(即将两数首尾相连)&#xff0c;每个…

基于springboot公租房申请管理系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError 文章目录 【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError1. 报错的具体情况2. 解决过程3. 其他问题3.1 ModuleNotFoundError: No module named OpenGL3.2 ModuleNotFoundEr…

固定差价没有发展起来,Anzo Capital一语道破

正所谓没有对比就没有伤害&#xff0c;固定差价被浮动差价所取代那也是时代发展的必然结果。固定差价没有发展起来&#xff0c;Anzo Capital今天一语道破。 其实在今天很少有外汇经纪人提供固定的差价。浮动差价变得如此受欢迎&#xff0c;以至于它几乎完全取代了固定差价。那…

从零开始学习Nginx

下载 nginx下载地址&#xff1a;http://nginx.org/en/download.html 启动 双击nginx.exe。打开cmd命令窗口&#xff0c;切换到nginx解压目录下&#xff0c;输入命令 nginx.exe &#xff0c;回车即可 PS&#xff1a;如果安装目录是中文的情况&#xff0c;打开exe文件时会报…

科研上新 | 第4期:语言-音乐对比预训练;查找表实现的神经网络推理;大模型时代重新定义搜索框架

编者按&#xff1a;欢迎阅读“科研上新”栏目&#xff01;“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里&#xff0c;你可以快速浏览研究院的亮点资讯&#xff0c;保持对前沿领域的敏锐嗅觉&#xff0c;同时也能找到先进实用的开源工具。 本期内容速览 …

手机电脑之间快速传输图片视频文件,不压缩画质、不限制大小的方法!

文件传输功能是日常必备功能&#xff0c;但总有传输工具不得“朕”心—— 想在手机和电脑之间传输稍微大一点的文件&#xff0c;弹出提示“限制多少多少G”&#xff0c;传个5G的视频或文件很平常吧&#xff0c;怎么就实现不了&#xff1f;想要将手机相册的视频和照片转移到电脑…

Python 雷达图的绘制(极坐标图) (Matplotlib篇-14)

Python 雷达图的绘制(极坐标图) (Matplotlib篇-14)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

芯课堂 | MCU之EXT

概述 本文将介绍一下华芯微特MCU的嵌套向量中断控制器&#xff08;NVIC&#xff09;与外部中断/事件控制器&#xff08;EXTI&#xff09;的使用方法等。 01.嵌套向量中断控制器&#xff08;NVIC&#xff09; NVIC的全称是Nested vectoredinterrupt controller&#xff0c;即嵌…

行政法学-第十二/十三章:司法审查

章节章节汇总第一章&#xff1a;绪论第二章&#xff1a;行政法的基本原则第三章&#xff1a;行政法律关系主体第四章&#xff1a;行政行为概述第五章&#xff1a;抽象行政行为第六/七章&#xff1a;依申请/依职权的具体行政行为第八章&#xff1a;特殊类型的行政行为第九章&…

ModuleNotFoundError: No module named ‘numpy.testing.decorators‘

文章目录 报错信息报错原因解决方案 关注公众号&#xff1a;『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号或➕v&#xff1a;codebiubiubiu滴滴我 报错信息 ModuleNotFoundError: No module named numpy.testing.decorators 报错原因 新版本已经去…