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 timefrom PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QMessageBoxUSER_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_MainWindowclass 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_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic: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.hqwc.cn/news/325325.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机上连网络转接app,电脑连接手机,共用网络转接app的办法

方法一&#xff0c;&#xff08;不推荐&#xff09; 因为太简单了所以写一下 电脑安装MuMu模拟器&#xff0c;之后安装网络转接app&#xff0c;这个模拟器设置了从电脑上安装app和&#xff0c;安卓与电脑同步文件夹功能&#xff0c;实现文件共享。所以直接用就可以了。 方法二…

音乐制作软件Studio One mac有哪些特点

Studio One mac是一款专业的音乐制作软件&#xff0c;该软件提供了全面的音频编辑和混音功能&#xff0c;包括录制、编曲、合成、采样等多种工具&#xff0c;可用于制作各种类型的音乐&#xff0c;如流行音乐、电子音乐、摇滚乐等。 Studio One mac软件特点 1. 直观易用的界面&…

C# .Net学习笔记—— 异步和多线程(await/async)

一、介绍 1、控制台测试await/async 2、C# 5.0 .Net framework4.5 CLR4.0 以后才有&#xff0c;本身是一种语法糖 二、基本测试 1、不加await测试。 private async static Task TestAsync() {Log.Info($"当前主线程id{Thread.CurrentThread.ManagedThreadId}"…

全视通-医院智能视讯系统 病房视讯系统解决方案 智能医院对讲系统信息发布系统

医院智能视讯系统解决方案 1、行业背景 对于患者来说现阶段各大医院的住院部大都面临同样的问题&#xff0c;例如患者就医缺乏精准化医疗&#xff0c;缺乏对患者的心理健康引导&#xff0c;缺乏多维度沟通渠道&#xff0c;缺乏多元增值服务等。 对于传统医院住院部病房&am…

【数据库】CRUD常用函数UNION 和 UNION ALL

文章目录 一、CRUD二、函数2.1 字符函数 (Character Functions):2.2 数字函数 (Numeric Functions):2.3 日期函数 (Date Functions):2.4 流程控制函数:2.5 聚合函数: 三、UNION 和 UNION ALL3.1 UNION&#xff1a;3.2 UNION ALL3.3 注意事项 一、CRUD CRUD 是指数据库操作的四…

【大数据进阶第三阶段之Hive学习笔记】Hive的数据类型与数据操作

【大数据进阶第三阶段之Hive学习笔记】Hive安装-CSDN博客 【大数据进阶第三阶段之Hive学习笔记】Hive常用命令和属性配置-CSDN博客 【大数据进阶第三阶段之Hive学习笔记】Hive基础入门-CSDN博客 【大数据进阶第三阶段之Hive学习笔记】Hive查询、函数、性能优化-CSDN博客 …

多级缓存、OpenResty缓存、Redis分布式缓存、进程缓存

目录标题 一、预期表现二、环境配置1、nginx环境2、OpenResty环境3、redis环境3.1 安装redis3.2 配置启动命令3.3 配置主从3.4 哨兵 4、进程缓存环境 三 、主要编码工作3.1、缓存主要问题解决3.1.1 缓存穿透3.1.2 缓存雪崩3.1.3 缓存击穿 3.2、OpenResty编码3.2.1 openresty/ng…

Java:爬虫htmlunit

为什么htmlunit与HttpClient两者都可以爬虫、网页采集、通过网页自动写入数据&#xff0c;我们会推荐使用htmlunit呢? 一、网页的模拟化 首先说说HtmlUnit相对于HttpClient的最明显的一个好处&#xff0c;HtmlUnit更好的将一个网页封装成了一个对象&#xff0c;如果你非要说H…

鸿蒙开发之拖拽事件

一、拖拽涉及的方法 Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//拖拽开始.onDragStart((event: DragEvent) > {console.log(drag event onDragStartevent.getX())})//拖拽进入组件范围&#xff0c;需要监听onDrop配合.onDragEnter((event: DragEvent) …

解决:ModuleNotFoundError: No module named ‘bs4’

解决&#xff1a;ModuleNotFoundError: No module named ‘bs4’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named bs4背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff0c;直接安装方法二&#xff0c;手动下载安装方法三&#xff0c;编译安装…

6 网关和配置服务器

文章目录 网关模式Spring Cloud网关Spring Cloud网关微服务其他项目的变更运行和测试小结 运行状况Spring Boot Actuator在微服务中包含Actuator 服务发现和负载均衡ConsulSpring Cloud ConsulSpring Cloud负载均衡器网关中的服务发现和负载均衡使用服务发现和负载均衡 环境配置…

机器视觉系统选型-环境配置:报错序列不包含任何元素 的解决方法

描述 环境&#xff1a;VM4.0.0VS2015 及以上 现象&#xff1a;配置环境后&#xff0c;获取线线测量模块结果&#xff0c;报错“序列不包含任何元素”。如下图所示&#xff1a; 解答 将“\VisionMaster4.0.0\Development\V4.0.0 \ComControls\bin\x64”下整体重新拷贝。