파이썬/PYQT

pyqt 그룹박스 (QGroupBox) 내 체크박스(QCheckBox) 체크된 항목 확인

개발자J군 2022. 12. 29. 18:08

pyqt에서 정해지지 않은 수의 체크박스를 만든 경우 체크 여부를 확인하는 방법

 

from PyQt5.QtWidgets import QWidget, QCheckBox, QGroupBox, QPushButton
from PyQt5.QtWidgets import QScrollArea
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QVBoxLayout

import sys

class MyApp(QWidget):
    def __init__(self):
        super(MyApp, self).__init__()

        self.initUI()


    def initUI(self):
        self.scrollarea = QScrollArea(self)
        self.scrollarea.setFixedWidth(500)
        self.scrollarea.setWidgetResizable(True)

        widget = QWidget()
        my_groupbox = QGroupBox("Group박스", widget)
        self.lay_out = QVBoxLayout(my_groupbox)  # 세로
        self.scrollarea.setWidget(my_groupbox)
        widget.setFixedSize(700, 50)

        for i in range(100):  # 임의의 체크박스들을 생성
            item = QCheckBox(str(i), my_groupbox)
            self.lay_out.addWidget(item)

        button = QPushButton("체크된 항목 PRINT")
        self.lay_out.addWidget(button)
        button.clicked.connect(self.ButtonClicked)

        self.layout_All = QVBoxLayout(self)
        self.layout_All.addWidget(self.scrollarea)

        self.show()

    def ButtonClicked(self):

        check_list = []

        for i in range(self.lay_out.count()):

            cbox = self.lay_out.itemAt(i).widget()
            # print(first.text())
            if isinstance(cbox, QCheckBox):
                if cbox.isChecked():
                    check_list.append(cbox.text())

        print(check_list)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyApp()
    sys.exit(app.exec_())

 

클릭이벤트를 줄 수 없는 상황이기 때문에, 별도의 버튼을 만들고 버튼을 클릭할 경우 체크된 항목을 확인할 수 있다.

 

만약 QVBoxLayout 안에 다중으로 QHBoxLayout 등이 존재한다면 아래와 같이 응용이 가능하다.

(또는 그 반대의 경우라도 가능)

    def ButtonClicked(self):
        
        check_list = []

        for i in range(self.lay_out.count()):

            col = self.lay_out.itemAt(i)
            for k in range(len(col)):
                cbox = col.itemAt(k).widget()
                if isinstance(cbox, QCheckBox):
                    if cbox.isChecked():
                        check_list.append(cbox.text())
        print(check_list)
반응형