热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

点击后发送QCheckBox的状态和数字

我正试图通过QCheckBox单击信号传递两个单独的变量:其按下后的状态以及

我正试图通过QCheckBox单击信号传递两个单独的变量:其按下后的状态以及其在列表中的索引。

例如,这是我的代码:

# pip install pyqt5
from PyQt5.QtMultimediaWidgets import *
from PyQt5.QtMultimedia import *
from functools import partial
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import *
import sys
batch_name = ['Test1','test2','test']
total_batches = 0
unfinished_batches = 0
class Mainmenu(QWidget):
def __init__(self,parent = None):
global total_batches,unfinished_batches,batch_name
super(Mainmenu,self).__init__(parent)
self.scroll = QScrollArea(self)
self.scroll.setWidgetResizable(True)
self.cOntent= QWidget()
self.scroll.setWidget(self.content)
self.lay = QGridLayout(self.content)
for i,j in enumerate(batch_name):
self.btnName = QPushButton(j,self)
self.btnName.setflat(True)
self.lay.addWidget(self.btnName,i,1)
self.check_box = QCheckBox(self)
checkbox_index = partial(self.clickBox,i)
self.check_box.stateChanged.connect(checkbox_index)
self.lay.addWidget(self.check_box,0)
total_batches += 1
def clickBox(self,state,index):
print(index)
print(state)
global unfinished_batches,total_batches
if state == Qt.Checked:
unfinished_batches += 1
else:
unfinished_batches -= 1
if __name__ == '__main__':
app = QApplication(sys.argv)
main = Mainmenu()
main.show()
sys.exit(app.exec_())

(是的,我知道我要传递两次索引。)

所以可以说,我按了第一个QCheckBoxTest1):对于状态,我应该得到True,对于索引应该得到0。如果我再次按Test1,则期望状态为False,索引为0。再举一个例子,如果我按test(最后一个QCheckBox),我应该期望得到True的状态和2的索引,然后再按一次,对于状态,我应该得到False,对于索引,我应该再次得到2

上面的代码为我提供了索引,但没有提供其状态-这就是我所坚持的。我期望如果按下QCheckBox会发生什么,那么我应该得到True,而我没有到达。


您没有正确使用partial。如果在partial中指定了两个参数,则clickBox的两个参数都将被i的值覆盖。您只需要指定index参数的值,并允许信号提供state参数的值即可。可以使用关键字参数来完成此操作,例如:

# checkbox_index = partial(self.clickBox,i,i)
checkbox_index = partial(self.clickBox,index=i)

但是请注意,state是CheckState enum中的一个值,因此,如果您特别想获得True/False,则可以改用lambda

checkbox_index = lambda state,index=i: self.clickBox(state == Qt.Checked,index)

clickState应该看起来像这样:

def clickBox(self,state,index):
print(index)
print(state)
global unfinished_batches,total_batches
if state == True:
unfinished_batches += 1
else:
unfinished_batches -= 1

,

尝试一下:

import sys
from functools import partial
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class MainMenu(QWidget):
def __init__(self,parent = None):
super(MainMenu,self).__init__(parent)
batch_name = ['Test1','test2','test']
lay = QGridLayout(self)
for i,j in enumerate(batch_name):
check_box = QCheckBox()
lay.addWidget(check_box,0)
btnName = QPushButton(j)
btnName.setFlat(True)
btnName.setCheckable(True)
btnName.clicked.connect(partial(self.btnCliced,j,check_box))
lay.addWidget(btnName,1)
check_box.stateChanged.connect(partial(self.clickBox,btnName))
def clickBox(self,btnName,state):
print(f'clickBox: i={i},j={j},state={state} : {bool(state)};')
if state: btnName.setChecked(True)
else: btnName.setChecked(False)
def btnCliced(self,check_box,state):
print(f'btnCliced: i={i},state={state};')
if state: check_box.setChecked(True)
else: check_box.setChecked(False)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainMenu()
main.show()
sys.exit(app.exec_())

enter image description here


推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍了在安装或运行 Python 项目时遇到的 'ModuleNotFoundError: No module named setuptools_rust' 错误,并提供了解决方案。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • 在学习网页爬虫时,使用Selenium进行自动化操作。初次安装selenium模块后,第二天运行代码时遇到了ImportError:无法从'selenium'导入名称'webdriver'。本文将详细解释该问题的原因及解决方案。 ... [详细]
  • 本文介绍如何使用 Python 的 xlrd 库读取 Excel 文件,并将其数据处理后存储到数据库中。通过实际案例,详细讲解了文件路径、合并单元格处理等常见问题。 ... [详细]
  • Python 异步编程:ASGI 服务器与框架详解
    自 Python 3.5 引入 async/await 语法以来,异步编程迅速崛起,吸引了大量开发者的关注。本文将深入探讨 ASGI(异步服务器网关接口)及其在现代 Python Web 开发中的应用,介绍主流的 ASGI 服务器和框架。 ... [详细]
author-avatar
zhang时代小窝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有