[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) 옵션으로 그룹의 사용 여부를 지정할 수 있습니다.