Reputation: 33
I am developing a GUI in PySide2, in which I am displaying a QCheckBoxes in a QScrollArea using a loop, and I want to access those checkboxes which are checked by the user.
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_()
This is the code which create checkboxes in my window, how would I know that which checkboxes are checked by user
Upvotes: 1
Views: 2108
Reputation: 13651
Try it:
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_()
Upvotes: 1