☘️

011 QGroupBox (그룹 박스)

1. 코드

from PyQt5.QtWidgets import QWidget, QApplication, QGroupBox, QRadioButton, QCheckBox, QPushButton, QGridLayout, QVBoxLayout, QMenu, QLabel, QHBoxLayout from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap import sys class 그룹박스(QWidget): def __init__(self): super().__init__() self.UI초기화() def UI초기화(self): img = QPixmap('img/pyqt.png') label = QLabel() label.setPixmap(img) label.setAlignment(Qt.AlignCenter) grid = QGridLayout() grid.addWidget(self.RadioGroup(), 0, 0) grid.addWidget(self.CheckGroup(), 1, 0) grid.addWidget(label, 0, 1, 2, 1) grid.addWidget(self.PushButtonGroup(), 2, 0, 2, 2) self.setLayout(grid) self.setWindowTitle('QGroupBox') self.setGeometry(300, 300, 480, 320) self.show() def RadioGroup(self): RadioGroupBox = QGroupBox('라디오 버튼 그룹') radio1 = QRadioButton('Radio 버튼 1') radio2 = QRadioButton('Radio 버튼 2') radio3 = QRadioButton('Radio 버튼 3') radio2.setChecked(True) vbox = QVBoxLayout() vbox.addWidget(radio1) vbox.addWidget(radio2) vbox.addWidget(radio3) RadioGroupBox.setLayout(vbox) return RadioGroupBox def CheckGroup(self): CheckBoxGroup = QGroupBox('체크박스 그룹') CheckBoxGroup.setCheckable(True) CheckBoxGroup.setChecked(False) checkbox1 = QCheckBox('체크박스1') checkbox1.setChecked(True) checkbox2 = QCheckBox('체크박스2') tristatebox = QCheckBox('체크박스3') tristatebox.setTristate(True) hbox = QHBoxLayout() hbox.addWidget(checkbox1) hbox.addWidget(checkbox2) hbox.addWidget(tristatebox) CheckBoxGroup.setLayout(hbox) return CheckBoxGroup def PushButtonGroup(self): PushButtonGroupBox = QGroupBox('푸시버튼 그룹') PushButtonGroupBox.setAlignment(Qt.AlignCenter) PushButton = QPushButton('기본 버튼') PushButton.setStyleSheet("color: green;" "border-style: solid;" "border-width: 3px;" "background-color: beige;" ) CheckedButton = QPushButton('체크 표시 버튼') CheckedButton.setCheckable(True) CheckedButton.setChecked(True) FlatButton = QPushButton('Flat 버튼') FlatButton.setFlat(True) PopupButton = QPushButton('팝업 창 버튼') menu = QMenu(self) menu.addAction('옵션 1') menu.addAction('옵션 2') PopupButton.setMenu(menu) vbox = QVBoxLayout() vbox.addWidget(PushButton) vbox.addWidget(CheckedButton) vbox.addWidget(FlatButton) vbox.addWidget(PopupButton) PushButtonGroupBox.setLayout(vbox) return PushButtonGroupBox 프로그램무한반복 = QApplication(sys.argv) 실행인스턴스 = 그룹박스() 프로그램무한반복.exec_()

2. 상세 내용

그룹 박스는 여러가지 Object, 가령 Label이나 PushButton 등을 모아서 하나의 그룹을 만들 수 있는 기능입니다. QGroupBox를 통해 만들 수 있습니다. 여기서는 각각의 그룹을 모듈화 하여 만들도록 하겠습니다.
 
def RadioGroup(self): RadioGroupBox = QGroupBox('라디오 버튼 그룹') radio1 = QRadioButton('Radio 버튼 1') radio2 = QRadioButton('Radio 버튼 2') radio3 = QRadioButton('Radio 버튼 3') radio2.setChecked(True) vbox = QVBoxLayout() vbox.addWidget(radio1) vbox.addWidget(radio2) vbox.addWidget(radio3) RadioGroupBox.setLayout(vbox) return RadioGroupBox
  • 라디오버튼으로만 구성된 그룹을 함수로 만들어 적용
  • radio2는 프로그램 실행시 체크된 상태로 나타남
  • 리턴을 해주어야 QGroupBox에서 적용가능
 
def CheckGroup(self): CheckBoxGroup = QGroupBox('체크박스 그룹') CheckBoxGroup.setCheckable(True) CheckBoxGroup.setChecked(False) checkbox1 = QCheckBox('체크박스1') checkbox1.setChecked(True) checkbox2 = QCheckBox('체크박스2') tristatebox = QCheckBox('체크박스3') tristatebox.setTristate(True) hbox = QHBoxLayout() hbox.addWidget(checkbox1) hbox.addWidget(checkbox2) hbox.addWidget(tristatebox) CheckBoxGroup.setLayout(hbox) return CheckBoxGroup
  • setCheckable : 사용자가 체크기능을 허락하는 지 여부 만약 False값이 라면 하위 버튼들도 선택 불가, 기본적으로는 박스가 없이 생성 (하위 버튼들은 선택 가능)
  • setChecked(False) : 이 체크박스 그룹은 체크가 안된 상태로 실행
  • setTristate: 3개의 값을 가진 체크박스를 생성 [체크,미체크,네모]
 
def PushButtonGroup(self): PushButtonGroupBox = QGroupBox('푸시버튼 그룹') PushButtonGroupBox.setAlignment(Qt.AlignCenter) PushButton = QPushButton('기본 버튼') PushButton.setStyleSheet("color: green;" "border-style: solid;" "border-width: 3px;" "background-color: beige;" ) CheckedButton = QPushButton('체크 표시 버튼') CheckedButton.setCheckable(True) CheckedButton.setChecked(True) FlatButton = QPushButton('Flat 버튼') FlatButton.setFlat(True) PopupButton = QPushButton('팝업 창 버튼') menu = QMenu(self) menu.addAction('옵션 1') menu.addAction('옵션 2') PopupButton.setMenu(menu) vbox = QVBoxLayout() vbox.addWidget(PushButton) vbox.addWidget(CheckedButton) vbox.addWidget(FlatButton) vbox.addWidget(PopupButton) PushButtonGroupBox.setLayout(vbox) return PushButtonGroupBox
  • setFlat : 버튼을 눌렀을때에만 버튼의 모양이 나오는 옵션
  • QMenu를 활용, PopupButton에 메뉴를 추가
 
def UI초기화(self): img = QPixmap('img/pyqt.png') label = QLabel() label.setPixmap(img) label.setAlignment(Qt.AlignCenter) grid = QGridLayout() grid.addWidget(self.RadioGroup(), 0, 0) grid.addWidget(self.CheckGroup(), 1, 0) grid.addWidget(label, 0, 1, 2, 1) grid.addWidget(self.PushButtonGroup(), 2, 0, 2, 2) self.setLayout(grid)
  • 라벨에 이미지를 업데이트하고 GridLayout를 활용해 만들어진 함수들을 넣습니다.
  • label(그림)은 0행 1열에서 1행 1열 까지 확장
  • 마지막 PushButtonGroup는 2행 0열에서 2행 1열 확장

3. 실행 화면

notion imagenotion image