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.rhkb.cn/news/9436.html

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

相关文章

园区管理智能化创新引领企业效能提升与风险控制新趋势

内容概要 在现代园区管理中&#xff0c;智能化创新正成为越来越多企业优化效能和控制风险的重要途径。通过引入先进的技术手段&#xff0c;企业能够更高效地管理资源&#xff0c;并实现全面的风险控制。 首先&#xff0c;园区管理系统的基本概念和发展现状让我们看到科技与管…

LTV预估 | 深度学习PLTV之开山鼻祖ZILN

&#x1f923; 这一集让我们欢迎基于深度学习的pltv方法&#xff1a;ZILN&#xff0c;ZILN可以说是后面很多研究的参考方法&#xff0c;我看了好几篇最新的pltv论文&#xff0c;都是基于ZILN来做的。 文章目录 1 精简总结2 背景&挑战&#xff1a;3 方法&#xff1a;实验&am…

docker安装emqx

emqx安装 拉取emqx镜像 docker pull emqx/emqx:v4.1.0 运行docker容器 docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.1.0 放行端口 1、如果要是自己的虚拟机&#xff0c;并且关闭了防火墙&a…

【C++题解】1393. 与7无关的数?

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1393. 与7无关的数&#xff1f; 类型&#xff1a;简单循环 题目描述&#xff1a; 一个整数&#xff0c;如果这个数能够被 7 整除&#xff0c;或者其中有一位是7&#xff0c;我们称…

分享| RL-GPT 框架通过慢agent和快agent结合提高AI解决复杂任务的能力-Arxiv

结论 “RL-GPT: Integrating Reinforcement Learning and Code-as-policy” RL-GPT 框架为解决大语言模型在复杂任务处理中的难题提供了创新有效的途径&#xff0c; 旨在将强化学习&#xff08;RL&#xff09;和代码即策略相结合&#xff0c; 以解决大语言模型&#xff08…

多级缓存(亿级并发解决方案)

多级缓存&#xff08;亿级流量&#xff08;并发&#xff09;的缓存方案&#xff09; 传统缓存的问题 传统缓存是请求到达tomcat后&#xff0c;先查询redis&#xff0c;如果未命中则查询数据库&#xff0c;问题如下&#xff1a; &#xff08;1&#xff09;请求要经过tomcat处…

3、C#基于.net framework的应用开发实战编程 - 实现(三、三) - 编程手把手系列文章...

三、 实现&#xff1b; 三&#xff0e;三、编写应用程序&#xff1b; 此文主要是实现应用的主要编码工作。 1、 分层&#xff1b; 此例子主要分为UI、Helper、DAL等层。UI负责便签的界面显示&#xff1b;Helper主要是链接UI和数据库操作的中间层&#xff1b;DAL为对数据库的操…

RPC是什么?和HTTP区别?

RPC 是什么&#xff1f;HTTP 是什么&#xff1f; 作为一个程序员&#xff0c;假设我们需要从A电脑的进程发送一段数据到B电脑的进程&#xff0c;我们一般会在代码中使用 Socket 进行编程。 此时&#xff0c;可选性一般就是 TCP 和 UDP 二选一&#xff0c;由于 TCP 可靠、UDP 不…

在无sudo权限Linux上安装 Ollama 并使用 DeepSeek-R1 模型

本教程将指导你如何在 Linux 系统上安装 Ollama&#xff08;一个本地运行大型语言模型的工具&#xff09;&#xff0c;并加载 DeepSeek-R1 模型。DeepSeek-R1 是一个高性能的开源语言模型&#xff0c;适用于多种自然语言处理任务。 DeepSeek-R1 简介 DeepSeek-R1 是 DeepSeek …

大数据治理实战:架构、方法与最佳实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 大数据治理是确保数据质量、合规性和安全性的重要手段&#xff0c;尤其在数据驱动决策和人工智能应用日益普及的背景下&…

JavaScript_02 表单

表单常用演示: 1.图片 结果失真了... 2.切换图片 切换结果 3.表单:

【MySQL】初始MySQL、库与表的操作

目录 基本使用 使用案例 SQL分类 存储引擎 库的操作 字符集和校验规则 查看系统默认字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定编码常见数据库 校验规则对数据库的影响 操纵数据库 库的备份与恢复 表的操作 创建表 查看表 …

three.js用粒子使用canvas生成的中文字符位图材质

three.js用粒子使用canvas生成中文字符材质 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Three.…

unity实现回旋镖函数

最近学习unity2D&#xff0c;想实现一个回旋镖武器&#xff0c;发出后就可以在角色周围回旋。 一、目标 1.不是一次性的&#xff0c;扔出去、返回、没有了&#xff1b;而是扔出去&#xff0c;返回到角色后方相同距离&#xff0c;再次返回&#xff1b;再次返回&#xff0c;永远…

Cursor 帮你写一个小程序

Cursor注册地址 首先下载客户端 点击链接下载 1 打开微信开发者工具创建一个小程序项目 选择TS-基础模版 官方 2 然后使用Cursor打开小程序创建的项目 3 在CHAT聊天框输入自己的需求 比如 小程序功能描述&#xff1a;吃什么助手 项目名称&#xff1a; 吃什么小程序 功能目标…

oracle比较一下统计信息差异吧

统计信息发生了哪些变化&#xff1f; 从上次收集到最近一次收集有什么不同&#xff1f; set long 999999 longc 99999 line 100 select report, maxdiffpct from table(dbms_stats.diff_table_stats_in_history(SYS,T1,to_timestamp(2025-01-22 09:01:46,YYYY-MM-DD hh24:mi:s…

STM32 LED呼吸灯

接线图&#xff1a; 这里将正极接到PA0引脚上&#xff0c;负极接到GND&#xff0c;这样就高电平点亮LED&#xff0c;低电平熄灭。 占空比越大&#xff0c;LED越亮&#xff0c;占空比越小&#xff0c;LED越暗 PWM初始化配置 输出比较函数介绍&#xff1a; 用这四个函数配置输…

机器人基础深度学习基础

参考&#xff1a; &#xff08;1&#xff09;【具身抓取课程-1】机器人基础 &#xff08;2&#xff09;【具身抓取课程-2】深度学习基础 1 机器人基础 从平面二连杆理解机器人学 正运动学&#xff1a;从关节角度到末端执行器位置的一个映射 逆运动学&#xff1a;已知末端位置…

低代码产品表单渲染架构

在React和Vue没有流行起来的时候&#xff0c;低代码产品的表单渲染设计通常会使用操作Dom的方式实现。 下面是一个表单的例子&#xff1a; 产品层 用户通过打开表单&#xff0c;使用不同业务场景业务下的表单页面&#xff0c;中间的Render层就是技术实现。 每一个不同业务的表单…

【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)

祈愿在2025蛇年里&#xff0c; 伟大的祖国风调雨顺、国泰民安、每个人齐心协力&#xff0c;共同经历这百年未有之大变局时代&#xff08;国际政治、AI技术……&#xff09; 祝福亲友同事孩子们平安健康&#xff08;安全、安全、安全&#xff09;、巳巳如意&#xff01; 背景需…