pyside6怎么使用Qt Designer设计自定义组件

news2024/11/19 14:39:01

第一步,新建一个自定义组件的python文件

from PySide6.QtWidgets import QPlainTextEdit
from PySide6.QtCore import Signal,Qt

class CustomPlainTextEdit(QPlainTextEdit):
    enterPressed = Signal(str)

    def __init__(self, parent=None):
        super().__init__(parent)

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Return:
            self.enterPressed.emit(self.toPlainText())
            self.setPlainText("")#清空发送框文本
        else:
            super().keyPressEvent(event)

我这里新建了一个按回车键可以将文本框中信息发送出去的自定义文本框。
我不知道Qt Designer是不是可以直接用界面生成自定义组件类的模板代码,所以只能手敲了。

我们自定义的类是在QPlainTextEdit的基础上派生的,所以接下来要在Qt Designer上新建一个QPlainTextEdit
如果不涉及信号槽等交互功能的话,只建立一个组件即可,我这里因为涉及到两个文本框之间通信,所以干脆建立了两个QPlainTextEdit
如图:
在这里插入图片描述
在需要转化为自定义组件的组件上右键,点击“提升到”,如图:
在这里插入图片描述
在弹出的对话框中,选择基类(取决于我们从哪个官方组件进行的派生),手动填写提升后的类名以及头文件,如图:
在这里插入图片描述
**这里需要万分注意:**头文件一般会自动生成,不过这个生成的是C++代码的头文件,通常以".h"结尾,而我们需要的却是python的头文件。所以,在这个头文件的地方要填写我们之前自定义类的文件名(不含后缀),如图:
在这里插入图片描述
全局包含的选项貌似不用勾。
完了就点击添加。
接下来就会看到提升的类列表里面出现了我们刚才填写的信息,此时提升按钮才由灰色不可点击变为可点击状态,点击它:
在这里插入图片描述
别搞错了,是点击最下面的提升按钮。

接着保存这个ui文件。
将它编译成py文件。

为什么要这样做,而不是直接就用代码自定义组件?
因为这样我们就不需要手敲布局和大小这些和UI强相关的代码了,直接在Qt Designer中调整好布局,然后一键编译,就得到对应的.py文件了。这是我生成出来的自定义组件布局代码:
在这里插入图片描述
至于生成出来的自定义组件代码怎么使用。
在主页/入口代码的顶部,from XXX import YYY
其中XXX填的是这个自动生成并编译后的.py文件的名字(不含后缀),YYY填的是该自定义组件的类名
注意,这种是单独使用自定义组件的情况。我们实际使用的时候,更多的情况应该是一个窗口里面有多个自定义组件。这就需要你给每一个打算自定义的组件都先给它自定义一个类。
在导入的时候,就不用单独导入自定义组件了,把总的那个UI文件的类导入即可。
比如,默认的啥都不改的情况下,导入可能长这样:
在这里插入图片描述

最后再讲讲如果涉及到信号槽的自定义组件怎么搞。
可以看到,我们最开始自定义的那个组件的代码中,有定义一个信号:enterPressed = Signal(str)
在Qt Designer中按F4(或者Edit→编辑信号/槽),进入信号槽设置界面,左键点击要发送信号的组件,拖拽箭头到要接收信号的组件(或者说要设置槽的组件)
在这里插入图片描述
单击左键会进入到这个界面中:

在这里插入图片描述
点击编辑按钮进行编辑。
如果信号里面有现成自己需要的,那就直接选择即可,没有的话才需要点编辑

点击绿色加号,如图:
在这里插入图片描述
填入我们的信号名,如图:
在这里插入图片描述
可能有人注意到,Qt Designer中给了带字符串参数的示例参考,但我这里却填的str而非QString,这是因为QString是qt5以及之前的标准,咱们这里用的是pyside6,而pyside6已经跟python本身的字符串表示保持一致了,直接用str即可。
点击OK就创建好了自定义的信号,不过,要把信号与槽关联起来,还需要在下面这个界面中,依次选择信号和要触发的槽函数:
在这里插入图片描述
左边是信号,右边是槽,可以看到槽的列表是灰色不可编辑状态,这是因为该组件我们还没有提升为自定义组件,一旦将其提升为自定义组件,该组件的槽便可编辑了。
在这里插入图片描述
产生了触发关系的信号与槽长这样,记得保存ui文件。

顺便提一下信号和槽可以同时存在多个,比如我既可以设置按回车触发文字上屏,也可以设置按小键盘enter进行换行而非文字上屏。
信号与槽的这种关系是一一对应的,可以直接在Qt Designer中通过拖拽箭头进行快速关联,而不用费劲儿去手敲代码。
整个触发的顺序链应该是这样的:事件→信号→槽
可以参考我一开始的这个自定义组件的代码:

from PySide6.QtWidgets import QPlainTextEdit
from PySide6.QtCore import Signal,Qt

class CustomPlainTextEdit(QPlainTextEdit):
    enterPressed = Signal(str)

    def __init__(self, parent=None):
        super().__init__(parent)

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Return:
            self.enterPressed.emit(self.toPlainText())
            self.setPlainText("")#清空发送框文本
        else:
            super().keyPressEvent(event)

我是通过keyPressEvent事件,检测到按键,然后判断按下的是回车键,再手动发起了一个信号self.enterPressed.emit(self.toPlainText())
如果没有什么字符串需要传给槽函数组件,那就不用在括号里加字符串:
self.enterPressed.emit()
记得在Qt Designer当中新药要和这个保持一致,如果不发送字符串,创建信号的时候就不要在里面填str

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

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

相关文章

EChart简单入门

echart的安装就细不讲了,直接去官网下,实在不会的直接用cdn,省的一番口舌。 cdn.staticfile.net/echarts/4.3.0/echarts.min.js 正入话题哈 什么是EChart? EChart 是一个使用 JavaScript 实现的开源可视化库,Echart支持多种常…

【环境变量】常见的环境变量 | 相关指令 | 环境变量系统程序的结合理解

目录 常见的环境变量 HOME PWD SHELL HISTSIZE 环境变量相关的指令 echo&env export unset 本地变量 环境变量整体理解 程序现象_代码查看环境变量 整体理解 环境变量表 环境变量表的传递 环境变量表的查看 测试验证 少说废话🆗 每个用户…

前端canvas项目实战——在线图文编辑器(八):复制、删除、锁定、层叠顺序

目录 前言一、效果展示二、实现步骤1. 复制2. 删除3. 锁定4. 层叠顺序 三、实现过程中发现的bug1. clone方法不复制自定义属性2. 复制「锁定」状态的对象,得到的新对象也是「锁定」状态 四、Show u the code后记 前言 上一篇博文中,我们细致的讲解了实现…

高精度端到端在线校准环视相机和LIDAR(精度0.2度内!无需训练数据)

高精度端到端在线校准环视相机和LIDAR(精度0.2度内!无需训练数据) 附赠自动驾驶学习资料和量产经验:链接 写在前面 在自动驾驶车辆的使用寿命内,传感器外参校准会因振动、温度和碰撞等环境因素而发生变化。即使是看似…

智过网:非安全专业能否报考注安?哪些专业可以报考?

近年来,随着社会对安全生产管理的日益重视,注册安全工程师(简称注安)这一职业逐渐受到广大从业人员的青睐。然而,对于许多非安全专业的朋友来说,他们可能会困惑:非安全专业是否可以报考注安&…

微软推出GPT-4 Turbo优先使用权:Copilot for Microsoft 365商业用户享受无限制对话及增强图像生成能力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

thinkphp6入门(22)-- 如何下载文件

假设在public/uploads文件夹下有一个文件test.xlsx 在前端页面添加下载链接&#xff0c;用户点击该链接即可下载对应的文件。 <a href"xxxxxxx/downloadFile">下载文件</a> 2. 在后端控制器方法中&#xff0c;我们需要获取要下载的文件路径&#xff0…

Prometheus+grafana环境搭建Docker服务(docker+二进制两种方式安装)(八)

由于所有组件写一篇幅过长&#xff0c;所以每个组件分一篇方便查看&#xff0c;前七篇链接如下 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabbitmq(docker二进制两种方式安装)(二)-CSDN博客 Prometheusgrafana环…

软考115-上午题-【计算机网络】-HTML

一、真题 真题1&#xff1a; alink属性表示一个链接的当前激活状态的颜色&#xff0c;即用户正在点击或已经点击的链接的颜色。 vlink属性用于设定已访问过的超链接文本的显示颜色&#xff0c;即用户已经点击过并且已经访问过的链接的颜色。 真题2&#xff1a; <table bord…

智能感应门改造工程

今天记录一下物联网专业学的工程步骤及实施过程 智能感应门改造工程 1 规划设计1.1 项目设备清单1.2项目接线图 软件设计信号流 设备安装与调试工程函数 验收 1 规划设计 1.1 项目设备清单 1.2项目接线图 软件设计 信号流 设备安装与调试 工程函数 工程界面: using System; …

【C++算法竞赛 · 图论】图论基础

前言 图论基础 图的相关概念 图的定义 图的分类 按数量分类&#xff1a; 按边的类型分类&#xff1a; 边权 简单图 度 路径 连通 无向图 有向图 图的存储 方法概述 代码 复杂度 前言 图论&#xff08;Graph theory&#xff09;&#xff0c;是 OI 中的一样很大…

【Rust】生命周期

Rust 生命周期机制是与所有权机制同等重要的资源管理机制。 之所以引入这个概念主要是应对复杂类型系统中资源管理的问题。 引用是对待复杂类型时必不可少的机制&#xff0c;毕竟复杂类型的数据不能被处理器轻易地复制和计算。 但引用往往导致极其复杂的资源管理问题&#x…

C#探索之路基础夯实篇(4):UML类图中的六种关系详细说明

文章目录 UML类图中的关系前景1、关联关系&#xff08;Association&#xff09;&#xff1a;2、聚合关系&#xff08;Aggregation&#xff09;&#xff1a;3、组合关系&#xff08;Composition&#xff09;&#xff1a;4、泛化关系&#xff08;Generalization&#xff09;&…

PTA C 1050 螺旋矩阵(思路与优化)

本题要求将给定的 N 个正整数按非递增的顺序&#xff0c;填入“螺旋矩阵”。所谓“螺旋矩阵”&#xff0c;是指从左上角第 1 个格子开始&#xff0c;按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列&#xff0c;满足条件&#xff1a;mn 等于 N&#xff1b;m≥n&#xff1b;且…

gitea简单介绍

Gitea是一个轻量级的开源自托管Git服务&#xff0c;提供了类似GitHub的功能和界面。它是一个简单、易于安装和使用的Git代码托管解决方案&#xff0c;适用于个人、小型团队和企业。 Gitea的主要特点如下&#xff1a; 自托管&#xff1a;Gitea允许在自己的服务器上搭建和管理…

zdpreact_antdesginpro 继续优化Ant Design开发的后台管理系统

登录后台管理系统 首先&#xff0c;将项目跑起来&#xff1a; 浏览器访问&#xff1a;http://localhost:8000/user/login 通过上次的优化&#xff0c;我们已经能够使用自己的账号密码进行登录了&#xff1a; 底部优化 登录后台以后&#xff0c;目前的底部是长这样的&…

《QT实用小工具·十六》IP地址输入框控件

1、概述 源码放在文章末尾 该项目为IP地址输入框控件&#xff0c;主要包含如下功能&#xff1a; 可设置IP地址&#xff0c;自动填入框。 可清空IP地址。 支持按下小圆点自动切换。 支持退格键自动切换。 支持IP地址过滤。 可设置背景色、边框颜色、边框圆角角度。 下面…

计算机网络 实验指导 实验12

路由信息协议&#xff08;RIP&#xff09;实验 1.实验拓扑图 名称接口IP地址网关Switch AF0/1192.168.1.1/24F0/2172.1.1.1/24Switch BF0/1192.168.1.2/24F0/2172.2.2.1/24PC1172.1.1.2/24172.1.1.1PC2172.1.1.3/24172.1.1.1PC3172.2.2.2/24172.2.2.1PC4172.2.2.3/24172.2.2.1…

纯小白蓝桥杯备赛笔记--DAY9(动态规划)

文章目录 一、动态规划基础&#xff08;1&#xff09;线性DP简介步骤例题数字三角形--1536破损的楼梯-3367安全序列-3423 &#xff08;2&#xff09;二维DP简介例题摆花--389选数异或--3711数字三角形--505 &#xff08;3&#xff09;最长公共子序列LCSLCS算法模型最长公共子序…

【Kafka】Kafka安装、配置、使用

【Kafka】安装Kafka 1. 安装Kafka2. Kafka使用2.0 集群分发脚本xsync(重要)2.0.1 scp命令2.0.2 rsync远程同步工具2.0.3 写一个集群分发脚本xsync (Shell 脚本) 2.1 Zookeeper安装2.2 对Kafka进行分发2.2.1 执行同步脚本2.2.2 三台云主机配置Kafka环境变量 1. 安装Kafka Kafka…