首页 > 解决方案 > 如何访问在 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_()

这是在我的窗口中创建复选框的代码,我怎么知道用户检查了哪些复选框

标签: pythonpython-3.xpyside2

解决方案


试试看:

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_()

在此处输入图像描述


推荐阅读