Python GUI 开发 | Qt Designer — 工具介绍

关注这个框架的其他相关笔记:Python GUI 开发 | PySide6 & PyQt6 学习手册-CSDN博客

Qt Designer 即 Qt 设计师,是一个强大、灵活的可视化 GUI 设计工具,可以帮助用户加快开发 PySide6 程序的速度。

Qt Designer 是专门用来制作 PySide6 程序中的 UI 界面的工具,生成的 UI 界面是一个后缀 .ui 的文件。该文件的使用方式十分简单,我们可以通过插件或者命令行工具很方便的将其转化为 .py 文件。

对于 Qt Designer 环境的安装可以参考下面这篇文章(本篇采用 VScode 作为 IDE 工具):

Python GUI 开发 | PySide6 & PyQt6 框架初识_pyside6 脚手架-CSDN博客文章浏览阅读715次,点赞32次,收藏22次。PySide 和 PyQt 都是 Python 用来开发 GUI(图形用户界面)的库,它们起源于 C++ 的程序开发框架 Qt。比如下面,就是一个 GUI 界面(学了这个你也可以开发出下面的界面):PySide 与 PyQt 这两个库的功能基本上是差不多的,主要差别在于许可方式上:PyQt:采用 GPL 协议,如果分发软件,则必须向用户提供软件的源代码。PySide:采用 LGPL 协议,如果分发软件,则无须将应用程序的源代码给用户。_pyside6 脚手架 https://blog.csdn.net/m0_73360524/article/details/145355229

0x01:创建主窗口

通过在 VSCode 中配置的插件,我们右击选择 “PYQT:New Form”,打开 Qt Designer:

如上,当我们打开 Qt Designer 时它会自动弹出 “新建窗体” 对话框。在该对话框中,它提供给了我们几个可选的窗体,在这几种模板中,我们最常用的是 Widget(通用窗口)和 Main Window(主窗口)。在 PySide6 中,Widget 被分离出来,用来代替 Dialog(对话框),并将 Widget 放入了 QtWidget 模块库中。

简单来说,Widget 就是一个空白的窗口,长下面这样(啥都没配置):

Main Window 就是一个带有菜单的窗口,长下面这样:

至于 Dialog,本来是用来做模态框的,但是它可以完美的被 Widget 窗口替代,所以我们就少学点,用 Widget 窗口代替 Dialog 窗口就可以了。

我们这里选择 Main Window,创建一个主窗口,然后保存文件名为 firstMainWindow.ui

0x02:Qt Designer 区域介绍

0x0201:窗口部件盒

“窗口部件盒” 区域提供了很多控件,每个控件都有自己的名称,用于提供不同的功能,用户可以通过拖拽就可以很轻松的将部件直接拖动到主窗口中:

通过快捷键 Ctrl + R 或者在菜单栏中选择 “窗体” => “预览” 命令,就可以看到窗口的预览效果:

0x0202:对象检查器

在 “对象检查器” 面板中,可以查看主窗口中放置的对象列表:

从上面那个对象列表中我们可以一眼看出来,MainWindow 中包含了三个对象 centralwidget(中心窗口)、menubar(菜单栏)、statusbar(状态栏):

然后中心窗口中又有一个 pushButton 对象:

0x0203:属性编辑器

“属性编辑器” 面板中提供了对窗口、控件、布局的属性编辑功能,如下图所示:

如上,我们修改了 QPushButton 的 text 属性值为 “按钮”,PushButton 内部的文字就修改成了 “按钮”。

0x0204:信号/槽编辑器

在 “信号/槽编辑器” 面板中,可以为控件添加自定义的信号与槽函数,以及编辑控件的信号与槽函数:

对于 “信号/槽”,可以简单理解为,当触发某个信号则执行对应的动作(槽函数)。比如,当按钮点击(触发了点击信号),则关闭窗口(点击信号对应的槽函数)。这个后面会细讲,读者有个概念即可。

0x0205:资源浏览器

在 “资源浏览器” 中,用户可以查看到经过编译的资源文件(资源文件是 PySide 中的一个重点,但是暂时用不到,读者只要了解到 “资源浏览器” 长啥样即可):

0x03:查看 .ui 文件内容

在前面的介绍中,我们创建了一个 firstMainWindow.ui 文件,然后里面还拖进去了一个 PushButton(按钮),我们使用本地的编辑器打开这个 .ui 文件,可以看到其格式如下:

上图是一个 XML 格式的文档,包含了我们窗口中各个对象的属性信息。

0x04:.ui 文件转 .py 文件

使用 Qt Designer 设计的用户界面默认保存为 .ui 文件,其内容结构类似于 XML,但这种文件并不是我们想要的,我们想要的 .py 文件,所以我们还得使用其他方法将 .ui 文件转化为 .py 文件。

0x0401:命令行方式

PySide6 安装成功后会自动安装 pyside6-uic.exe,该 exe 工具就是专门用来将 .ui 文件编译为 .py 文件的,使用方法很简单:

 pyside6-uic <待转换的 ui 文件路径> -o <转换后的 .py 文件名称>

比如,笔者想将当前文件夹下的 firstMainWindow.ui 转化为 firstMainWindow.py 可以使用如下命令:

 pyside6-uic ./firstMainWindow.ui -o firstMainWindow.py

0x0402:Vscode - 插件快速转化

记得我们在搭建 PySide6 开发环境时配置的插件吗,使用它我们可以很轻松的通过右击的方式一键转化:

没有安装此插件的可以去参考下面的这篇文章的 VScode 配置部分的内容:

Python GUI 开发 | PySide6 & PyQt6 框架初识_pyside6 脚手架-CSDN博客文章浏览阅读717次,点赞32次,收藏22次。PySide 和 PyQt 都是 Python 用来开发 GUI(图形用户界面)的库,它们起源于 C++ 的程序开发框架 Qt。比如下面,就是一个 GUI 界面(学了这个你也可以开发出下面的界面):PySide 与 PyQt 这两个库的功能基本上是差不多的,主要差别在于许可方式上:PyQt:采用 GPL 协议,如果分发软件,则必须向用户提供软件的源代码。PySide:采用 LGPL 协议,如果分发软件,则无须将应用程序的源代码给用户。_pyside6 脚手架 https://blog.csdn.net/m0_73360524/article/details/145355229?spm=1001.2014.3001.5501

0x05:界面与逻辑分离 - .ui 文件使用

上面介绍了如何使用 QT Designer 制作 .ui 文件,又介绍了如何将 .ui 文件转化为 .py 文件。那么西面我们就要介绍如何使用这个转化后的 .py 文件。

我们将由 .ui 文件转化来的 .py 文件称为 “界面文件”,由于这个界面文件是由 .ui 文件编译而来的,所以如果我们的 .ui 文件发生改变后,我们对应的界面文件也会发生变化。因此,我们要是直接把功能逻辑写在界面文件中的话,那样每次编译都会失去我们的功能逻辑。为此,我们推荐采用 “界面与逻辑分离” 的写法,即除了界面文件外,再新建一个 .py 文件,里面专门用来存放逻辑代码。

我们创建一个 firstMainWindow.py 文件来当作我们的第一个逻辑文件,下面是我当前的目录结构:

其中 firstMainWindow.ui 是我们前面介绍的那个窗口,Ui_firstMainWindow.py 是从 .ui 程序编译而来的,然后 firstMainWindow.py 文件是笔者刚刚创建的,用来存放逻辑代码的文件。

我们往 firstMainWindow.py 文件中写入如下内容(这就是使用 ui 文件最简单,最固定的写法):

 from PySide6.QtWidgets import QApplication, QMainWindowfrom Ui_firstMainWindow import * # 这个 UI 我们使用的是 MainWindow 制作的​class MyWindow(QMainWindow, Ui_MainWindow): # 因为我们 ui 使用的是 MainWindow 做的,所以这里继承 QMainWindowdef __init__(self):super().__init__()self.setupUi(self) # 启动 UI 文件​if __name__ == '__main__':app = QApplication([]) # 改成 sys.argsv => 可以在启动的时候传入一些参数,没有啥必要window = MyWindow()window.show()app.exec()

然后运行 firstMainWindow.py 就会弹出我们前面制作好的 UI 界面:

通过上面这种方式,我们既能在 firstMainWindow.py 中实现业务逻辑,又不用担心 UI 界面的变化对我们逻辑代码的影响。

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

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

相关文章

基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真。选择回归法进行最大功率点的追踪&#xff0c;使用光强和温度作为影响因素&#xff0c;电压作为输出进行建模。…

嵌入式蓝桥杯电子赛嵌入式(第14届国赛真题)总结

打开systic 生成工程编译查看是否有问题同时打开对应需要的文档 修改名称的要求 5.简单浏览赛题 选择题&#xff0c;跟单片机有关的可以查相关手册 答题顺序 先从显示开始看 1,2 所以先打开PA1的定时器这次选TIM2 从模式、TI2FP2二通道、内部时钟、1通道设为直接2通道设置…

SuperAGI - 构建、管理和运行 AI Agent

文章目录 一、关于 SuperAGI&#x1f4a1;特点&#x1f6e0; 工具包 二、⚙️安装☁️SuperAGI云&#x1f5a5;️本地&#x1f300; Digital Ocean 三、架构1、SuperAGI 架构2、代理架构3、代理工作流架构4、Tools 架构5、ER图 一、关于 SuperAGI SuperAGI 一个开发优先的开源…

FLTK - FLTK1.4.1 - demo - adjuster.exe

文章目录 FLTK - FLTK1.4.1 - demo - adjuster.exe概述笔记根据代码&#xff0c;用fluid重建一个adjuster.fl 备注 - fluid生成的代码作为参考代码好了修改后可用的代码END FLTK - FLTK1.4.1 - demo - adjuster.exe 概述 想过一遍 FLTK1.4.1的demo和测试工程&#xff0c;工程…

本地大模型编程实战(03)语义检索(2)

文章目录 准备按批次嵌入加载csv文件&#xff0c;分割文档并嵌入测试嵌入效果总结代码 上一篇文章&#xff1a; 本地大模型编程实战(02)语义检索(1) 详细介绍了如何使用 langchain 实现语义检索&#xff0c;为了演示方便&#xff0c;使用的是 langchain 提供的内存数据库。 在实…

以太网详解(六)OSI 七层模型

文章目录 OSI : Open System Interconnect&#xff08;Reference Model&#xff09;第七层&#xff1a;应用层&#xff08;Application&#xff09;第六层&#xff1a;表示层&#xff08;Presentation&#xff09;第五层&#xff1a;会话层&#xff08;Session&#xff09;第四…

单片机基础模块学习——DS18B20温度传感器芯片

不知道该往哪走的时候&#xff0c;就往前走。 一、DS18B20芯片原理图 该芯片共有三个引脚&#xff0c;分别为 GND——接地引脚DQ——数据通信引脚VDD——正电源 数据通信用到的是1-Wier协议 优点&#xff1a;占用端口少&#xff0c;电路设计方便 同时该协议要求通过上拉电阻…

在每一次灵感碰撞中,见证成长的蜕变--24年年度总结

我也来写一个年度总结吧。从24年8月5号开始了职业生涯的第一篇创作&#xff0c;当时刚好被拉去封闭开发了&#xff0c;做一个保密的AI赋能业务的项目。当时写博客的初衷是为了记录项目中遇到的一些问题以及技术栈的使用、原理剖析等&#xff0c;从而让自己快速成长。没想到文章…

基于paddleocr的表单关键信息抽取

全流程如下&#xff1a; 数据集 XFUND数据集是微软提出的一个用于KIE任务的多语言数据集&#xff0c;共包含七个数据集&#xff0c;每个数据集包含149张训练集和50张验证集分别为&#xff1a; ZH(中文)、JA(日语)、ES(西班牙)、FR(法语)、IT(意大利)、DE(德语)、PT(葡萄牙)&a…

AIGC视频扩散模型新星:Video 版本的SD模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍慕尼黑大学携手 NVIDIA 等共同推出视频生成模型 Video LDMs。NVIDIA 在 AI 领域的卓越成就家喻户晓&#xff0c;而慕尼黑大学同样不容小觑&#xff0c;…

深度解析:基于Vue 3的教育管理系统架构设计与优化实践

一、项目架构分析 1. 技术栈全景 项目采用 Vue 3 TypeScript Tailwind CSS 技术组合&#xff0c;体现了现代前端开发的三大趋势&#xff1a; 响应式编程&#xff1a;通过Vue 3的Composition API实现细粒度响应 类型安全&#xff1a;约60%的组件采用TypeScript编写 原子化…

aws(学习笔记第二十六课) 使用AWS Elastic Beanstalk

aws(学习笔记第二十六课) 使用aws Elastic Beanstalk 学习内容&#xff1a; AWS Elastic Beanstalk整体架构AWS Elastic Beanstalk的hands onAWS Elastic Beanstalk部署node.js程序包练习使用AWS Elastic Beanstalk的ebcli 1. AWS Elastic Beanstalk整体架构 官方的guide AWS…

视频多模态模型——视频版ViT

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细解读多模态论文《ViViT: A Video Vision Transformer》&#xff0c;2021由google 提出用于视频处理的视觉 Transformer 模型&#xff0c;在视频多模态领域有…

【ArcGIS微课1000例】0141:提取多波段影像中的单个波段

文章目录 一、波段提取函数二、加载单波段导出问题描述:如下图所示,img格式的时序NDVI数据有24个波段。现在需要提取某一个波段,该怎样操作? 一、波段提取函数 首先加载多波段数据。点击【窗口】→【影像分析】。 选择需要处理的多波段影像,点击下方的【添加函数】。 在多…

讨论:延迟双删,要延迟多久呢?

这个延迟双删&#xff0c;其实是保证数据库和缓存数据一致性的一种方案来的。大家觉得应该如何回答更好呢&#xff1f;我觉得可以先从最基础的开始聊起&#xff0c;比如什么是一致性&#xff0c;然后从串联起来。我聊聊我的思路。 首先&#xff0c;先回归基础&#xff0c;什么…

SQL Server查询计划操作符(7.3)——查询计划相关操作符(5)

7.3. 查询计划相关操作符 38)Flow Distinct:该操作符扫描其输入并对其去重。该操作符从其输入得到每行数据时即将其返回(除非其为重复数据行,此时,该数据行会被抛弃),而Distinct操作符在产生任何输出前将消费所有输入。该操作符为逻辑操作符。该操作符具体如图7.2-38中…

智慧消防营区一体化安全管控 2024 年度深度剖析与展望

在 2024 年&#xff0c;智慧消防营区一体化安全管控领域取得了令人瞩目的进展&#xff0c;成为保障营区安全稳定运行的关键力量。这一年&#xff0c;行业在政策驱动、技术创新应用、实践成果及合作交流等方面呈现出多元且深刻的发展态势&#xff0c;同时也面临着一系列亟待解决…

关于圆周率的新认知

从自然对数底 的泰勒展开&#xff0c; 可以得出 的展开式&#xff0c; 它可以被认为是&#xff0c;以 0 为周期的单位 1 &#xff0c;以 1 为周期的单位 1 &#xff0c;以 2 为周期的单位 1 等所有自然数为周期的单位 1 分阶段合成&#xff08;体现为阶乘的倒数&#xff09;之…

Flutter使用Flavor实现切换环境和多渠道打包

在Android开发中通常我们使用flavor进行多渠道打包&#xff0c;flutter开发中同样有这种方式&#xff0c;不过需要在原生中配置 具体方案其实flutter官网个了相关示例&#xff08;https://docs.flutter.dev/deployment/flavors&#xff09;,我这里记录一下自己的操作 Android …

通过亚马逊云科技Bedrock打造自定义AI智能体Agent(上)

大家对于智能体代理Agent一定已经非常熟悉&#xff0c;自主代理&#xff08;Autonomous Agents&#xff09; 目前在AI行业极其热门并具有巨大的潜力&#xff0c;能够显著提升开发者日常的工作效率、自动化日常琐碎、重复性任务&#xff0c;并生成全新的内容。Agent可以理解用户…