PyQt5 关于Qt Designer的初步应用和打包过程详解
作者:氢键H-H 发布时间:2023-07-31 20:26:32
Qt Designer的介绍
在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成。Qt Designer的设计符合MVC的架构,其实现了视图和逻辑的分离,从而实现了开发的便捷。Qt Designer中的操作方式十分灵活,其通过拖拽的方式放置控件可以随时查看控件效果。Qt Designer生成的.ui文件(实质上是XML格式的文件)也可以通过pyuic5工具转换成.py文件。 Qt Designer随PyQt5-tools包一起安装,其安装路径在 “Python安装路径\Lib\site-packages\pyqt5-tools”下。若要启动Qt Designer可以直接到上述目录下,双击designer.exe打开Qt Designer;或将上述路径加入环境变量,在命令行输入designer打开;或在PyCharm中将其配置为外部工具打开。下面以PyCharm为例,讲述PyCharm中Qt Designer的配置方法。
机器人开发之路总会有很多的艰难险阻,但虽然辛苦,还是选择了那种滚烫的人生。很幸运,获得了机器人开发领域优质创作者身份认证。征途漫漫,惟有奋斗,共勉!
1. 缘由
开发过程中,难免需要自己手动开发一些交互工具简单的如自动化脚本复杂一点的呢就是带界面交互的应用软件了
QT呢就是一款很受欢迎的图形用户界面应用程序开发框架只宠Python的搬运工,就需要Python和Qt库融合的工具,它就是 PyQt5
在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成其实现了视图和逻辑的分离,从而实现了开发的便捷
2. 搭建
2.1. 安装
若未安装pyqt5,则需先安装:
$ pip3 install pyqt5
然后安装常用工具:
$ pip3 install pyqt5-tools pyinstaller
pyqt5和pyinstaller有版本对应关系,推荐同时期安装,如果版本偏差,会导致pyinstaller打包一直失败。
2.2. 打开
找到 Qt Designer 应用程序启动文件,这边的地址是对应Python目录下的 \Lib\site-packages\qt5_applications\Qt\bin\designer.exe
可以添加桌面快捷方式方便后续打开
打开 designer.exe
创建新的Form给出了5个模板,但实际上只有3种不同类型的模板,分别是Dialog、Main Window和Widget
Main Window 主界面
一个窗口是父/子的顶部,通常显示标题栏和边框。底层窗口系统(Windows、KDE、GNOME等)将为窗口提供策略,如标题栏/边框样式、布局和焦点等。
Widget 小部件
屏幕上的一个矩形区域,用于显示和用户交互,包括按钮、滑块、视图、对话框和窗口等。所有窗口小部件将在屏幕上显示某些内容,许多窗口小部件也将接受来自键盘或鼠标的用户输入。
Dialog 对话框
通常是临时的,可以设置不同的标题栏外观,主要用于通知或收集输入窗口,并且底部或右侧通常具有OK、Cancel等按钮。
这里选择创建一个Main Window
在QT Designer界面里分为5个区域,正中间区域是软件设计的界面,左右两侧是功能区域,功能区域的说明如下:
Widget Box:控件区,软件的功能控件都在此区域生成,可以拉拽控件到模板上实现可视化软件设计。
对象查看器:软件的目录结构,显示模板中所有控件的类型,能帮助设计者快速找到控件。
属性编辑器:控件属性区,主要修改控件的属性。
信号/槽编辑器:对象间的通信机制。如单击按钮(信号 Signal)时候所触发的事件(槽 Slot)。
2.3. 设计
拉拽个按钮控件,并保存为csdn.ui
2.4. 转换
打开刚刚保存的ui文件,可以发现其实也就是XML文件
现在需要通过工具转换成py文件
$ pyuic5 源文件.ui -o 目标文件.py
即:
$ pyuic5 .\csdn.ui -o .\csdn.py
推荐作为py脚本,方便后续或批量转换
3. 效果
3.1. 引用
创建一个逻辑文件logic.py
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from csdn import Ui_MainWindow
class MyWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = MyWindow()
myWin.show()
sys.exit(app.exec_())
通过上述代码,继承了Ui_MainWindow类,使用其构造方法构造主窗口并定义了程序的入口,通过创建QApplication对象来创建Qt窗口
3.2. 启动
启动logic.py文件
3.3. 打包
可以通过pyinstaller进行打包
普通
$ pyinstaller -w logic.py
在dist文件夹内生成工程文件夹 logic,寻找logic.exe文件启动
整合
$ pyinstaller -F -w logic.py
在dist文件夹内生成logic.exe整合文件,点击启动(启动较久)
配置信息在执行以上两种打包时候,会产生.spec
配置文件,可以通过调整配置文件执行打包
$ pyinstaller logic.spec
3.4. 触发
使用connect()方法将信号与槽函数绑定在一起当信号发射时,连接槽函数将会自动执行
如把点击pushButton
按钮作为一个信号
class MyWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.setupUi(self)
# 将pushButton信号与槽函数touch_button绑定
self.pushButton.clicked.connect(self.touch_button)
def touch_button(self):
print('点击按钮了')
此时点击按钮,可看到终端显示提示了
来源:https://blog.csdn.net/qq_32618327/article/details/120438653


猜你喜欢
- 1、前提1.1 docker 安装elasticsearch查询elasticsearch 版本docker search elastics
- 前言最近在重构一个复选框组件,原型是select2这个jQuery插件, 有兴趣的可以去搜下,封装的很好,但是并不能满足业务所有需求,最要命
- 本文实例讲述了Python编程实现输入某年某月某日计算出这一天是该年第几天的方法。分享给大家供大家参考,具体如下:#基于 Pyth
- 直接使用model2=model1会出现当更新model2时,model1的权重也会更新,这和自己的初始目的不同。经评论指出可以使用:mod
- 实验室导师又有任务,从一个.dat文件中读取波形数据,通过一个自编码网络进行异常检测。可是对我这种小白来说真的艰难。从最基础的文件读写开始吧
- 1. argparse 模块简介argparse是一个用来解析命令行参数的 Python 库,它是 Python 标准库的一部分。基于 py
- 为了从视频中提取每一帧图片,编写Python脚本实现该功能video_path为指定的视频路径interval为指定分割视频是是否跳帧,默认
- 使用Python的第三方库pyautogui,PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘
- <%Class Cls_TemplateDim RegDim PageDim CIDDim SIDDim RuleDim Conten
- 本文实例讲述了python分析网页上所有超链接的方法。分享给大家供大家参考。具体实现方法如下:import urllib, htmllib,
- 相信大家对阶乘都不陌生。不知道阶乘的可以看这里:一个数的阶乘:比如5的阶乘在python中大部分教程一般推荐用递归函数完成:#!/usr/b
- Pytorch的backward()函数假若有多个loss函数,如何进行反向传播和更新呢? x = torch.tensor(2.0, re
- 一、提出问题利用SQL,从右到左查找某一字符串中匹配的查询串的第一个索引位置。比如有一字段ProductName值格式如下:短袖印花T恤 M
- 昨天又翻了下前段时间WD内部培训的幻灯片,发现了kejun推荐的一篇好文:Javascript Closures,看了之后受益匪浅。这篇文章
- 背景故事2022虎年将至,值此新春佳节之际,各大社区更是你争我赶纷纷发起春节征文活动正当我一筹莫展之际,几位粉丝朋友们的小请求点醒了我:对呀
- 编辑PyCharm安装目录下PyCharm 4.5.3\bin下的pycharm.exe.vmoptions文件, 如下-server-Xm
- div+css实现圆角边框,在网络上查看了一下,很多都是实现圆角的矩形的方法,我在这里介绍的是实现圆角矩形边框的方法。用代码说明问题:<
- 反射什么是反射? - 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省) 面向对象中的反射&nb
- 问题一:TypeError: a bytes-like object is required, not 'str'解决:该问
- 基于很多原因,有不少朋友的空间不支持FSO,当大量的页面生成静态页面时,占用大量的空间,修改样式时,不方便,所以动态页面还是有动态页面的好处