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)
반응형
'파이썬 > PYQT' 카테고리의 다른 글
inno setup 바탕화면 아이콘 생성 디폴트 체크 (0) | 2023.07.31 |
---|---|
PYQT 파이큐티 UI파일 PY파일 변환 (0) | 2022.12.15 |
PYQT 해상도 변경에 따른 문제 (1) | 2022.09.19 |