当前位置: 首页 > news >正文

【PyQt5教程 二】Qt Designer 信号与槽的使用方法及PyQt5基本小部件说明

目录

一、信号与槽机制:

二、信号与槽使用方法:

(1)使用Qt Designer 的信号与槽编辑器:

(2)使用固定语法直接建立信号槽连接:

 三、PyQt小部件及其触发信号:

(1)常见PyQt小部件及其触发信号:

(2) PyQt5 官方文档:

四、PyQt5 基本小部件:


一、信号与槽机制:

        PyQt5中的信号和槽机制是一种事件驱动编程范式,允许小部件(如按钮和菜单项)在特定用户交互发生时发出信号,并将这些信号连接到槽函数,即定义好的响应动作,从而实现用户界面与程序逻辑的松耦合和交互响应。

        PyQt中的小部件作为事件源,通过继承QObject类获得发出信号的能力。信号是事件通知,而槽是响应这些事件的函数。响应事件函数可以为任意可调用的python函数。

信号与槽机制具有以下特点。

  • 一个信号可以连接到多个槽。

  • 一个信号也可以连接到另一个信号。

  • Signal 参数可以是任何 Python 类型。

  • 一个槽可以连接到许多信号。

  • 连接可以是直接的(即同步的)或排队的(即异步的)。

  • 可以跨线程建立连接。

  • 信号可能会断开连接。

二、信号与槽使用方法:

(1)使用Qt Designer 的信号与槽编辑器:

首先先创建Qt Designer 文件,并在窗口内添加小部件如下:

【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码

 然后,点击信号与槽编辑器的+号,添加信号与槽:

添加过程

添加完成后保存.ui文件,并使用:

pyuic5 -x Signalandslot.ui -o Signalandslot.py

转化为对应的.py文件。Signalandslot.py如下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'Signalandslot.ui'
#
# Created by: PyQt5 UI code generator 5.15.11
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(800, 600)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.Button1 = QtWidgets.QPushButton(self.centralwidget)self.Button1.setGeometry(QtCore.QRect(140, 450, 93, 28))self.Button1.setObjectName("Button1")self.Button2 = QtWidgets.QPushButton(self.centralwidget)self.Button2.setGeometry(QtCore.QRect(540, 450, 93, 28))self.Button2.setObjectName("Button2")self.line_text = QtWidgets.QLineEdit(self.centralwidget)self.line_text.setGeometry(QtCore.QRect(290, 190, 171, 41))self.line_text.setObjectName("line_text")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)self.Button1.clicked.connect(self.line_text.clear) # type: ignoreself.Button2.clicked.connect(MainWindow.close) # type: ignoreQtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.Button1.setText(_translate("MainWindow", "清空"))self.Button2.setText(_translate("MainWindow", "退出"))if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)MainWindow = QtWidgets.QMainWindow()ui = Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())

运行结果:

运行结果

(2)使用固定语法直接建立信号槽连接:

widget.signal.connect(slot_function)

widget为对应触发信号的小部件,signal为信号类型,connect(slot_function)为连接到的槽函数,其中slot_function可以为任意可调用的python函数。

例如之前.ui生成的.py中有:

self.Button1.clicked.connect(self.line_text.clear) # type: ignore
self.Button2.clicked.connect(MainWindow.close) # type: ignore

 Button1,Button2为触发信号的小部件,clicked为触发的信号(即单击按钮),触发后执行槽函数,self.line_text.clear(清空line_text中的文本),MainWindow.close(关闭主窗口)。

 三、PyQt小部件及其触发信号:

PyQt中的信号和槽机制允许小部件(Widgets)在特定事件发生时发出信号,并将这些信号连接到槽函数上,以便执行相应的操作。

(1)常见PyQt小部件及其触发信号:

QPushButton(按钮):

  • clicked 信号:当按钮被点击时触发。可以传递一个布尔值,表示按钮是否被按下。
    btn.clicked.connect(lambda: some_function(True))
  • pressed 信号:当鼠标按下按钮时触发。
    btn.pressed.connect(some_function)
  • released 信号:当鼠标释放按钮时触发。
    btn.released.connect(some_function)

QCheckBox(复选框):

  • stateChanged 信号:当复选框的选中状态改变时触发。传递一个整数参数,表示新的复选框状态(0表示未选中,2表示选中)。
    checkbox.stateChanged.connect(some_function)

QRadioButton(单选按钮):

  • toggled 信号:当单选按钮的选中状态改变时触发。传递一个布尔值参数,表示当前是否被选中。
    radiobutton.toggled.connect(some_function)

QSlider(滑动条):

  • valueChanged 信号:当滑动条的值改变时触发。传递一个整数参数,表示滑动条的新值。
    slider.valueChanged.connect(some_function)
  • rangeChanged 信号:当滑动条的范围改变时触发。
    slider.rangeChanged.connect(some_function)

QListWidget(列表控件):

  • itemClicked 信号:当列表中的项被点击时触发。传递一个列表项对象作为参数。
    listwidget.itemClicked.connect(some_function)
  • itemDoubleClicked 信号:当列表中的项被双击时触发。
    listwidget.itemDoubleClicked.connect(some_function)

QComboBox(下拉列表框):

  • currentIndexChanged 信号:当下拉列表框的当前选中项改变时触发。传递一个整数参数,表示新的当前选中项的索引。
    combobox.currentIndexChanged.connect(some_function)
  • currentTextChanged 信号:当当前选中项的文本改变时触发。
    combobox.currentTextChanged.connect(some_function)

QLineEdit(文本输入框):

  • textChanged 信号:当文本框的内容改变时触发。传递一个字符串参数,表示文本框的新内容。
    lineedit.textChanged.connect(some_function)
  • editingFinished 信号:当编辑完成时触发,通常在用户按下回车键或离开编辑框时。
    lineedit.editingFinished.connect(some_function)

QTableWidget / QTreeView(表格和树视图):

  • itemClicked 信号:当表格或树中的项被点击时触发。
    table.itemClicked.connect(some_function)
  • itemDoubleClicked 信号:当表格或树中的项被双击时触发。
    table.itemDoubleClicked.connect(some_function)

QMainWindow / QDialog(主窗口 / 对话框):

  • accepted 信号:当对话框被接受时触发(例如,用户点击了OK按钮)。
    dialog.accepted.connect(some_function)
  • rejected 信号:当对话框被拒绝时触发(例如,用户点击了Cancel按钮)。
    dialog.rejected.connect(some_function)

(2) PyQt5 官方文档:

PyQt5 官方文档

四、PyQt5 基本小部件:

  • QLabel:用于显示文本或图像,不可编辑,可作为其他控件的辅助标签。

  • QLineEdit:单行文本输入框,适用于用户输入有限长度的文本。

  • QPushButton:按钮控件,点击时可触发预设的函数或动作。

  • QRadioButton:单选按钮,允许在多个选项中选择一个,适用于互斥选择。

  • QCheckBox:复选框,允许用户选择或取消选择一个选项,适用于多选场景。

  • QComboBox:下拉列表框,显示当前选中项,用户可从中选择一个选项。

  • QSpinBox:数字输入框,带有两个按钮用于增加或减少数值。

  • QSlider:滑动条控件,用户通过移动滑块选择一个有界值。

  • QMenuBar, QMenu & QAction:菜单栏、菜单和动作,用于组织和访问应用程序的功能。

  • QToolBar:工具栏,包含按钮和其他控件,提供快速访问常用功能。

  • QInputDialog:预配置对话框,用于收集用户输入的文本。

  • QFontDialog:字体选择对话框,返回用户选择的字体。

  • QFileDialog:文件选择对话框,用于浏览和选择文件。

  • QTabWidget:选项卡控件,允许将多个表单组织在不同的选项卡中。

  • QStackedWidget:堆叠控件,用于在有限空间内切换不同的表单或控件。

  • QSplitter:分割器控件,允许动态调整子控件的大小。

  • QDockWidget:可停靠窗口,可以浮动或附着在主窗口的边缘。

  • QStatusBar:状态栏,用于显示状态信息。

  • QListWidget:列表控件,用于显示和管理项目列表。

  • QScrollBar:滚动条,用于浏览超出可视区域的内容。

  • QCalendarWidget:日历控件,用于选择日期。

相关文章:

【PyQt5教程 二】Qt Designer 信号与槽的使用方法及PyQt5基本小部件说明

目录 一、信号与槽机制: 二、信号与槽使用方法: (1)使用Qt Designer 的信号与槽编辑器: (2)使用固定语法直接建立信号槽连接: 三、PyQt小部件及其触发信号: &#x…...

编程语言中接口(Interface)介绍

编程语言中接口(Interface)介绍 在编程语言中,“接口”(Interface)是一种抽象类型,定义了一组方法(和属性),但不包含其具体实现。接口通常用于规定类必须实现的行为&…...

算法学习之贪心算法

前言 记录一下,免得又又忘了 贪心算法 在刚接触的时候,我一直觉得贪心和动态规划有相似之处,但做过的题目看,贪心似乎不用迭代...

【jvm】垃圾回收的优点和原理

目录 1. 说明2. 优点3. 原理3.1 发现无用对象3.2 回收无用对象所占用的内存 4. 回收算法4.1 标记-清除算法4.2 复制算法4.3 标记-整理算法4.4 分代收集算法 1. 说明 1.JVM(Java虚拟机)垃圾回收是Java语言的一大特性,它自动管理内存&#xff…...

YOLO系列发展历程:从YOLOv1到YOLO11,目标检测技术的革新与突破

文章目录 前言一、YOLOv1:单阶段目标检测的开端二、YOLOv2:更精准的实时检测三、YOLOv3:阶梯特征融合四、YOLOv4:性能和速度的新平衡五、YOLOv5:易用性和扩展性的加强六、YOLOv6:工业部署的利器七、YOLOv7&…...

深入浅出:序列化与反序列化的全面解析

文章目录 1. 引言2. 什么是序列化?2.1 为什么需要序列化? 3. 什么是反序列化?3.1 反序列化的重要性 4. 序列化与反序列化的实现4.1 JSON (JavaScript Object Notation)4.2 XML (eXtensible Markup Language)4.3 Protocol Buffers (Protobuf)4…...

word实践:正文/标题/表图等的共用模板样式设置

说在前面 最近使用word新建文件很多,发现要给大毛病,每次新建一个word文件,标题/正文的字体、大小和间距都要重新设置一遍,而且每次设置这些样式都忘记了参数,今天记录一下,以便后续方便查看使用。现在就以…...

Blender中使用BlenderGIS插件快速生成城市建筑模型

导入下载 BlenderGIS 插件 去github上下载其压缩包,地址如下: https://github.com/domlysz/BlenderGIS 在BlenderGIS中导入这个插件压缩包: 点击上方菜单栏的编辑,点击偏好设置 在插件>从磁盘安装中导入刚刚下载的压缩包 可…...

【单元测试】单元测试的重要性

1一些错误的认识 在实际的单元测试过程中总会有一些错误的认识左右着我们,使之成为单元测试最大的障碍,在此将其一一分析如下: 它太浪费时间了,现在要赶进度,时间上根本不允许,或者随便做做应付领导。 …...

Codeforces Round 992 (Div. 2)

这场cf只在b卡了一下,因为b真是犯蠢了,我以为会向下取整,结果是完全就不取整,或者说是向上取整,卡了我半个小时,要不是紧急看了题一下,昨天那场就毁了 话不多说,直接开讲 A. Game …...

el-table一键选择全部行,切换分页后无法勾选

el-table一键全选,分页的完美支持 问题背景尝试解决存在问题问题分析 解决方案改进思路如下具体代码实现如下 问题背景 现在有个需求,一个表格有若干条数据(假设数量大于20,每页10条,保证有2个以上分页即可)。 现在需要在表格上方…...

负载均衡最佳实践及自定义负载均衡器

文章目录 负载均衡最佳实践及自定义负载均衡器一、负载均衡概述二、轮询负载均衡器(一)理论介绍(二)Java 实现示例(三)关键步骤(四)流程图 三、随机负载均衡器(一&#x…...

大模型 LMDeploy 量化部署

1 模型部署 定义: 在软件工程中,部署通常指的是将开发完毕的软件投入使用的过程。在人工智能领域,模型部署是实现深度学习算法落地应用的关键步骤。简单来说,模型部署就是将训练好的深度学习模型在特定环境中运行的过程。 场景…...

算法设计5_分支限界法

分支限界法 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树,裁剪那些不能得到最优解的子树以提高搜索效率。 步骤: ① 定义解空间(对解编码); ② 确定解空间的树结构; ③ 按BFS等方式搜索: a.每个活…...

2025年人工智能专业可以考哪些证书呢?

人工智能是目前全球热门的专业领域之一,随着人工智能应用范围的不断扩大,越来越多的人开始关注人工智能相关证书的获取。那么,人工智能专业可以考什么证书呢?本文将为大家介绍人工智能相关证书的种类。 人工智能机器视觉应用工程师…...

仿真技术助力高尔夫球打破传统设计局限,实现球杆强大的功能

Altair近日宣布与业内领先的高尔夫装备制造商 Cleveland Golf 开展合作,以设计新款 HiBore XL 球杆。借助 Altair 先进的仿真与设计技术,Cleveland Golf 不断刷新高尔夫装备的行业标准,并在球杆产品设计方面实现突破。 Cleveland Golf 借助 A…...

微前端架构学习笔记

前言 之前遇到过一个需求,有两个项目分别由两个不同的部门负责,不同技术栈,不同代码仓库: A 项目是官网,负责展示产品亮点等信息,有多个入口可以进入 B 项目中的不同页面。B 项目是业务线,负责…...

DApp开发:从合约到系统快速上线解决方案

在区块链技术迅猛发展的今天,去中心化应用(DApp)作为区块链的一项重要应用,已经吸引了众多开发者和企业的关注。与传统应用程序不同,DApp依托于区块链的去中心化特点,实现了透明、安全、不可篡改等优势&…...

react 中 useState 中的 set 方法异步解决

使用 useEffect 监听状态的改变。 一、异步特性 在批量处理状态更新时,用以提高性能。 二、异步解决 使用useEffect来处理更新后的状态,useEffect钩子在组件渲染后执行,并且会在依赖项(第二个参数)发生变化时重新执…...

UAC2.0 speaker——带反馈端点的 USB speaker(16bit 单声道)

UAC2.0 speaker 系列文章 UAC2.0 speaker——单声道 USB speaker(16bit) UAC2.0 speaker——类特殊请求 UAC2.0 speaker——音量控制 UAC2.0 speaker——多采样率支持 UAC2.0 speaker——24/32bit 支持 UAC2.0 speaker——speaker 数据传输 UAC2.0 speaker——同时支持 16bi…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...