Pyside6:多行按钮点击判断序号

在Pyside开发过程中会遇到这么个问题:当多个按钮在很多行中,需要在点击槽函数中确认按钮的行。

普通的按钮点击信号如下:

clicked()

该信号并未有任何参数,无法得到有效的信息,那么如何完成点击哪个确定是哪个按钮呢?

本文将介绍几种方式来实现上面的需求。本文的示例将用下面的界面来举例:

运行画面:

一、自定义按钮(不推荐)

1.1自定义代码

 通过自定义按钮控件,可以实现添加一个自定义信号来添加槽函数的参数:

# -*- coding: utf-8 -*-
from PySide6.QtWidgets import QPushButton
from PySide6.QtCore import Signalclass IndexButton(QPushButton):index_clicked = Signal(int)def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.index = 0def mousePressEvent(self, event):super().mousePressEvent(event)self.index_clicked.emit(self.index)

1.2Designer中进行提升

如果使用Designer,别忘了还需要进行按钮的提升才可以使用

1.3测试代码

# -*- coding: utf-8 -*-
from PySide6.QtWidgets import QWidget
from UI.TestPage_ui import Ui_Formclass TestPage(QWidget):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.ui = Ui_Form()self.ui.setupUi(self)self.button_list = [self.ui.pushButton_0,self.ui.pushButton_1,self.ui.pushButton_2,self.ui.pushButton_3]for i, btn in enumerate(self.button_list):btn.index = ibtn.index_clicked.connect(self.clicked)def clicked(self, index):self.ui.label.setText(f'当前点击了第{index}个按钮')

二、闭包实现

通过闭包的实现也可以完成相应的功能,闭包可以将临时变量保存到内存中。

2.1代码

def block(func, index):def inner():return func(index)return inner

 2.2测试代码

# -*- coding: utf-8 -*-
from PySide6.QtWidgets import QWidget
from UI.TestPage_ui import Ui_Formclass TestPage(QWidget):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.ui = Ui_Form()self.ui.setupUi(self)self.button_list = [self.ui.pushButton_0,self.ui.pushButton_1,self.ui.pushButton_2,self.ui.pushButton_3]def block(func, index):def inner():return func(index)return innerfor i, btn in enumerate(self.button_list):btn.clicked.connect(block(self.clicked, i))def clicked(self, index):self.ui.label.setText(f'当前点击了第{index}个按钮')

三、lambda加闭包实现

lambda加闭包的形式,其实还是一个闭包,但写法上会比普通闭包来的更简洁。 

3.1代码 

def create_button_callback(index):return lambda: self.clicked(index)

 3.2测试代码

# -*- coding: utf-8 -*-
from PySide6.QtWidgets import QWidget
from UI.TestPage_ui import Ui_Formclass TestPage(QWidget):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.ui = Ui_Form()self.ui.setupUi(self)self.button_list = [self.ui.pushButton_0,self.ui.pushButton_1,self.ui.pushButton_2,self.ui.pushButton_3]def create_button_callback(index):return lambda: self.clicked(index)for i, btn in enumerate(self.button_list):btn.clicked.connect(create_button_callback(i))def clicked(self, index):self.ui.label.setText(f'当前点击了第{index}个按钮')

四、self.sender()的使用(推荐)

在发送信号时,self可以拿到相应的发送者,通过它即可获取所对应的按钮,即可通过将按钮进行列表的包裹来判断下标。

4.1代码

index = self.button_list.index(self.sender())

4.2测试代码

# -*- coding: utf-8 -*-
from PySide6.QtWidgets import QWidget
from UI.TestPage_ui import Ui_Formclass TestPage(QWidget):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.ui = Ui_Form()self.ui.setupUi(self)self.button_list = [self.ui.pushButton_0,self.ui.pushButton_1,self.ui.pushButton_2,self.ui.pushButton_3]for i, btn in enumerate(self.button_list):btn.clicked.connect(self.clicked)def clicked(self):index = self.button_list.index(self.sender())self.ui.label.setText(f'当前点击了第{index}个按钮')

五、总结 

对于按钮点击时对应按钮的判断是非常常用的功能,由于普通槽函数不带特定参数很难实现相应功能,因此如果比较特殊的参数可以通过自定义控件来完成,如果比较简单如下标即可通过self.sender(),如果无法使用self.sender()来获取内容,又不想自定义控件,闭包是不错的选择。 

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

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

相关文章

计算机系列之校验码

6、校验码 1、码距 码距:就单个编码 A: 00 而言,其码距为 1,因为其只需要改变一位就变成另一个编码。**在两个编码中,从 A 码到 B 码转换所需要改变的位数成为码距,**如 A: 00 要转换为 B: 11,码距为2。一…

WIFI信号状态信息 CSI 特征提取篇之活动片段提取上(五)

在之前的数据处理环节中,用CSI Tool收集到的原始数据信号,经历了数据解析、降噪、插值的处理步骤,变成了干净、完整的信号片段,这是后续做更进一步分析的基础。 在开始阅读本篇博客前,需要说明两个重要的点&#xff1…

使用ClickHouse、Grafana和WarpStream规模化的解决可预测成本的日志留存

本文字数:13234;估计阅读时间:34 分钟 作者:Dale McDiarmid & Ryadh Dahimene 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 简介 在生产环境中操作任何复杂的技术堆栈而没有适当…

2024年低碳技术与污染控制技术国际学术会议(ICLCTPCT 2024)

2024年低碳技术与污染控制技术国际学术会议(ICLCTPCT 2024) 2024 International Conference on Low carbon technology and pollution control technology 一、【会议简介】 2024年低碳技术与污染控制技术国际学术会议,是交流科研成果的绝佳平台。 这次会议将汇集世…

如何利用美国站群服务器实现有效的SEO优化策略?

如何利用美国站群服务器实现有效的SEO优化策略? 在当今数字化时代,SEO优化对于网站的可见性和吸引力至关重要。站群服务器作为一种有效的SEO策略,可以通过多个相关联的网站在不同服务器上的部署,增强网站的权威性和链接多样性。尤其是在利用…

vector的使用(部分接口)

1.vector的使用 1.1vector的定义 (constructor)构造函数声明接口说明vector()无参构造vector (const vector& x)拷贝构造 1.2vector iterator 的使用 iterator的使用接口说明begin end获取第一个数据位置的iterator/const_iterator, 获取最后一个数据的下一个位…

【做算法学数据结构】二叉树的层序遍历【二叉树】

文章目录 题目二叉树二叉树描述二叉树的java描述和前序遍历、后序遍历、中序遍历 题解总结以及二叉树应用场景 题目 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历…

力扣HOT100 - 98. 验证二叉搜索树

解题思路&#xff1a; class Solution {public boolean isValidBST(TreeNode root) {return recur(root,Long.MIN_VALUE,Long.MAX_VALUE);}public boolean recur(TreeNode root,long lower,long upper){if(rootnull) return true;if(root.val<lower||root.val>upper) re…

python爬虫之爬取携程景点评价(5)

一、景点部分评价爬取 【携程攻略】携程旅游攻略,自助游,自驾游,出游,自由行攻略指南 (ctrip.com) import requests from bs4 import BeautifulSoupif __name__ __main__:url https://m.ctrip.com/webapp/you/commentWeb/commentList?seo0&businessId22176&busines…

爬虫零基础学习,第一天,安装环境,requests库常用命令的讲解

Python爬虫 爬虫学习思路 URL内容获取&#xff0c;requests的基本常用语法 import requests # 先向目标网站发送请求 url "http://www.baidu.com" r requests.get(url) # 可以用看一下访问码返回值是不是200&#xff0c;若是200则表示访问成功 print(r.status_…

Web3与物联网:探索区块链如何驱动智能设备的未来

引言 在数字化快速发展的时代&#xff0c;Web3技术和物联网&#xff08;IoT&#xff09;都成为了前沿技术的代表。两者的结合正逐渐展现出无限的可能性&#xff0c;尤其是在智能设备和数据安全方面。本文将深入探讨Web3如何与物联网相结合&#xff0c;以及这种结合对未来智能设…

现货白银价格走势分析别走弯路!

参与现货白银投资离不开对其价格走势的分析&#xff0c;虽然相关的分析方法有很多种&#xff0c;但说到直观高效的方法&#xff0c;技术分析就是很多专业投资者所钟爱的选择。投资者可以通过平台交易软件所自带的技术指标和画线工具&#xff0c;来辅助自己的分析&#xff0c;实…

UltraScale+的10G/25G Ethernet Subsystem IP核使用

文章目录 前言一、设计框图1.1、xxv_ethernet_01.2、xxv_ethernet_0_sharedlogic_wrapper1.3、xxv_ethernet_0_clocking_wrapper1.4、xxv_ethernet_0_common_wrapper 二、IP核配置三、仿真四、上板测速五、总结 前言 前面我们学习了很多基于XILINX 7系列的高速接口使用&#x…

【SpringBoot整合系列】SpringBoot配置多数据源

目录 背景技术选型配置多数据源思路(以两个为例)代码实现1.导入依赖2.各自的配置 3.各自的dataSourcenews数据库的smbms数据库的注意&#xff1a;Primary注解 4.各自的SqlSessionFactory等news数据库的smbms数据库的 5.去掉启动类头上的MapperScan6.各自的mapper接口7.各自的ma…

力扣HOT100 - 230. 二叉搜索树中第K小的元素

解题思路&#xff1a; class Solution {List<Integer> list new ArrayList<>();public int kthSmallest(TreeNode root, int k) {dfs(root);return list.get(k - 1);}public void dfs(TreeNode root) {if (root null) return;dfs(root.left);list.add(root.val)…

【Netty框架问题总结】

文章目录 Netty初步认识Netty简单介绍为什么jdk已经实现了NIO还要用netty框架&#xff1a; Reactor 线程模型Reactor 单线程模型Netty线程模型 Netty 简单实现EchoClient端实现&#xff1a;ClientHandler实现EchoServer实现ServerHandler实现&#xff1a; Netty初步认识 Netty…

【VSCode调试技巧】Pytorch分布式训练调试

最近遇到个头疼的问题&#xff0c;对于单机多卡的训练脚本&#xff0c;不知道如何使用VSCode进行Debug。 解决方案&#xff1a; 1、找到控制分布式训练的启动脚本&#xff0c;在自己的虚拟环境的/lib/python3.9/site-packages/torch/distributed/launch.py中 2、配置launch.…

检查*.bib参考文献是否重复

安装bibtexparser pip install bibtexparser 代码 import bibtexparser from difflib import SequenceMatcherdef parse_bib_file(filename):with open(filename, r, encodingutf-8) as bibfile:bib_database bibtexparser.load(bibfile)return bib_database.entriesdef fi…

Python构建学生信息管理系统:构建RESTful API - 学生信息管理系统的后端逻辑

在之前的博客里&#xff0c;我们已经完成了项目初始化&#xff0c;在本篇博客中&#xff0c;我们将深入探讨如何使用Flask框架实现学生信息管理系统的后端逻辑&#xff0c;特别是通过RESTful API来实现学生信息的增删改查&#xff08;CRUD&#xff09;操作。 Flask RESTful AP…

【Java】HOT100 回溯

目录 理论基础 一、组合问题 LeetCode77&#xff1a;组合 LeetCode17&#xff1a;电话号码的字母组合 LeetCode39&#xff1a;组合总和 LeetCode216&#xff1a;组合总和ii LeetCode216&#xff1a;组合总和iii 二、分割问题 LeetCode131&#xff1a;分割回文串 Leet…