python - 如何访问在 PySide2 中检查了哪个 QCheckBox?
问题描述
我正在 PySide2 中开发一个 GUI,其中我正在使用循环在 QScrollArea 中显示 QCheckBoxes,并且我想访问那些由用户选中的复选框。
import sys
from PySide2 import QtWidgets, QtCore
from PySide2.QtWidgets import QCheckBox
class MyWindow(QtWidgets.QMainWindow):
def __init__(self, data):
super().__init__()
self.data = data
self.scrollArea = QtWidgets.QScrollArea()
self.scrollArea.setWidgetResizable(True)
self.setCentralWidget(self.scrollArea)
self.widget = QtWidgets.QWidget()
self.scrollArea.setWidget(self.widget)
button = QtWidgets.QPushButton("Click me")
button.clicked.connect(self.onButton)
self.grid = QtWidgets.QGridLayout(self.widget)
self.grid.addWidget(button)
def onButton(self):
row = 1
for item in self.data:
checkBox_measurement = QCheckBox(item)
self.grid.addWidget(checkBox_measurement, row, 0)
line = QtWidgets.QFrame()
line.setFrameShape(QtWidgets.QFrame.HLine)
self.grid.addWidget(line, row+1, 0, 1, 2)
row += 2
data = ['Title 1', 'Title 2', 'Title 3' , 'Title 4', 'Title 5', 'Title 6' ,'Title 7', 'Title 8', 'Title 9' ]
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
myWindow = MyWindow(data)
myWindow.resize(500, 300)
myWindow.show()
app.exec_()
这是在我的窗口中创建复选框的代码,我怎么知道用户检查了哪些复选框
解决方案
试试看:
import sys
#from PySide2 import QtWidgets, QtCore
#from PySide2.QtWidgets import QCheckBox
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import QCheckBox
class MyWindow(QtWidgets.QMainWindow):
def __init__(self, data):
super().__init__()
self.data = data
self.scrollArea = QtWidgets.QScrollArea()
self.scrollArea.setWidgetResizable(True)
self.setCentralWidget(self.scrollArea)
self.widget = QtWidgets.QWidget()
self.scrollArea.setWidget(self.widget)
button = QtWidgets.QPushButton("Click me")
button.clicked.connect(self.onButton)
self.grid = QtWidgets.QGridLayout(self.widget)
self.grid.addWidget(button)
def onButton(self):
row = 1
for item in self.data:
checkBox_measurement = QCheckBox(item)
checkBox_measurement.stateChanged.connect(self.clickBox) # +
self.grid.addWidget(checkBox_measurement, row, 0)
line = QtWidgets.QFrame()
line.setFrameShape(QtWidgets.QFrame.HLine)
self.grid.addWidget(line, row+1, 0, 1, 2)
row += 2
def clickBox(self, state): # +
print(state, self.sender().text()) # +
data = ['Title 1', 'Title 2', 'Title 3' , 'Title 4', 'Title 5', 'Title 6' ,'Title 7', 'Title 8', 'Title 9' ]
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
myWindow = MyWindow(data)
myWindow.resize(500, 300)
myWindow.show()
app.exec_()
推荐阅读
- php - Lumen Jwt 身份验证获取(参数 2 传递给 Tymon\JWTAuth\JWTGuard)错误
- python - Pandas - 检查重复项
- swift - @State 私有变量是不可变的
- javascript - Intl.NumberFormat 格式美分转换为正确格式
- groovy - 将 LocalDateTime 转换为 unix 时间格式 - groovy.lang.MissingMethodException
- c++ - C ++中静态分配与动态分配的数组
- apache-kafka - 使用 MassTransit 的不可预测的 Kafka 偏移行为
- python - 如何使用networkx读取json图?
- visual-studio - 如何在 VS 中抑制此警告:“不支持应用于文档的架构类型”
- android - Android 传感器规格:单位、满量程