[PyQt5] 위젯, 그룹, 그리드, 묶음

2020. 2. 13. 16:40카테고리 없음

 

특정 위젯을 묶을 때 그룹이라는 기능을 사용합니다.

 

 

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGroupBox, QRadioButton, QCheckBox, QPushButton, QMenu, QGridLayout, QVBoxLayout

class groupboxApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        grid = QGridLayout()
        grid.addWidget(self.createFirstExclusiveGroup(), 0, 0)
        grid.addWidget(self.createSecondExclusiveGroup(), 1, 0)
        grid.addWidget(self.createNonExlusiveGroup(), 0, 1)
        grid.addWidget(self.createPushButtonGroup(), 1,1)
        self.setLayout(grid)
        self.setWindowTitle('그룹박스')
        self.setGeometry(500,500,500,400)
        self.show()

    def createFirstExclusiveGroup(self):
        groupbox = QGroupBox('첫 번째 그룹')
        radio1 = QRadioButton('첫 번째 라디오')
        radio1.setChecked(True)
        radio2 = QRadioButton('두 번째 라디오')
        radio3 = QRadioButton('세 번째 라디오')
        vbox = QVBoxLayout()
        vbox.addWidget(radio1)
        vbox.addWidget(radio2)
        vbox.addWidget(radio3)
        groupbox.setLayout(vbox)
        return groupbox

    def createSecondExclusiveGroup(self):
        groupbox = QGroupBox('두 번째 그룹')
        groupbox.setCheckable(True)
        groupbox.setChecked(False)
        radio1 = QRadioButton('첫 번째 라디오')
        radio1.setChecked(True)
        radio2 = QRadioButton('두 번째 라디오')
        radio3 = QRadioButton('세 번째 라디오')
        checkbox = QCheckBox('체크박스도 있음')
        checkbox.setChecked(True)
        vbox = QVBoxLayout()
        vbox.addWidget(radio1)
        vbox.addWidget(radio2)
        vbox.addWidget(radio3)
        vbox.addWidget(checkbox)
        vbox.addStretch(1)
        groupbox.setLayout(vbox)
        return groupbox

    def createNonExlusiveGroup(self):
        groupbox = QGroupBox('세 번째 그룹')
        groupbox.setFlat(True)
        checkbox1 = QCheckBox('첫 번째 체크박스')
        checkbox2 = QCheckBox('두 번째 체크박스')
        checkbox2.setChecked(True)
        tristatebox = QCheckBox('중간 체크')
        tristatebox.setTristate(True)
        vbox = QVBoxLayout()
        vbox.addWidget(checkbox1)
        vbox.addWidget(checkbox2)
        vbox.addWidget(tristatebox)
        vbox.addStretch(1)
        groupbox.setLayout(vbox)
        return groupbox

    def createPushButtonGroup(self):
        groupbox = QGroupBox('네 번째 그룹')
        groupbox.setCheckable(True)
        groupbox.setChecked(True)
        pushbtn = QPushButton('일반 버튼')
        togglebtn = QPushButton('토글 버튼')
        togglebtn.setCheckable(True)
        togglebtn.setChecked(True)
        flatbtn = QPushButton('플렛 버튼')
        flatbtn.setFlat(True)
        popupbtn = QPushButton('팝업 버튼')
        menu = QMenu(self)
        menu.addAction('첫 번째 요소')
        menu.addAction('두 번째 요소')
        menu.addAction('세 번째 요소')
        menu.addAction('네 번째 요소')
        popupbtn.setMenu(menu)
        vbox = QVBoxLayout()
        vbox.addWidget(pushbtn)
        vbox.addWidget(togglebtn)
        vbox.addWidget(flatbtn)
        vbox.addWidget(popupbtn)
        vbox.addStretch(1)
        groupbox.setLayout(vbox)
        return groupbox

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = groupboxApp()
    sys.exit(app.exec_())

 

무려 100줄 가까이 되지만 양만 많지, 원리는 단순합니다. grid에 그룹을 만드는 매소드를 추가해주고 출력하는 원리입니다.

참고로 QGroupBox 객체에 setCheckable(True) 옵션으로 그룹의 사용 여부를 지정할 수 있습니다.