카테고리 없음
[PyQt5] 위젯, 탭, 종합, 구분
useful-jang
2020. 2. 13. 18:34
많은 탭을 구분할 수 있어야 합니다. 이를 위해 각각의 탭을 묶는 기능이 있습니다.
import sys
from PyQt5.QtWidgets import *
class tabAdvancedApp(QDialog):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
tabs = QTabWidget()
tabs.addTab(FirstTab(), '1번 탭')
tabs.addTab(SecondTab(), '2번 탭')
tabs.addTab(ThirdTab(), '3번 탭')
buttonbox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
buttonbox.accepted.connect(self.accept)
buttonbox.rejected.connect(self.reject)
vbox = QVBoxLayout()
vbox.addWidget(tabs)
vbox.addWidget(buttonbox)
self.setLayout(vbox)
self.setWindowTitle('탭 활용')
self.setGeometry(500,500,300,400)
self.show()
class FirstTab(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
name = QLabel('이름: ')
nameedit = QLineEdit()
age = QLabel('나이: ')
ageedit = QLineEdit()
nation = QLabel('국가: ')
nationedit = QLineEdit()
vbox = QVBoxLayout()
vbox.addWidget(name)
vbox.addWidget(nameedit)
vbox.addWidget(age)
vbox.addWidget(ageedit)
vbox.addWidget(nation)
vbox.addWidget(nationedit)
vbox.addStretch()
self.setLayout(vbox)
class SecondTab(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
lan_group = QGroupBox('언어를 선택하세요.')
combo = QComboBox()
combo_list = ['한국어', '영어', '중국어']
combo.addItems(combo_list)
vbox1 = QVBoxLayout()
vbox1.addWidget(combo)
lan_group.setLayout(vbox1)
learn_group = QGroupBox('배우고 싶은 어어를 선택하세요.')
korean = QCheckBox('한국어')
english = QCheckBox('영어')
chinese = QCheckBox('중국어')
vbox2 = QVBoxLayout()
vbox2.addWidget(korean)
vbox2.addWidget(english)
vbox2.addWidget(chinese)
learn_group.setLayout(vbox2)
vbox = QVBoxLayout()
vbox.addWidget(lan_group)
vbox.addWidget(learn_group)
self.setLayout(vbox)
class ThirdTab(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
lb1 = QLabel('약관')
text_browser = QTextBrowser()
text_browser.setText('약관내용입니다.')
checkbox = QCheckBox('약관 동의')
vbox = QVBoxLayout()
vbox.addWidget(lb1)
vbox.addWidget(text_browser)
vbox.addWidget(checkbox)
self.setLayout(vbox)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = tabAdvancedApp()
sys.exit(app.exec_())
각 탭에서 QVBoxLayout()으로 세로 박스를 만들어서 레이아웃을 만들어 줍니다. 각 탭을 만드는 기능을 클래스로 만들어주고 tabs에 추가해주면 각각의 탭으로 구분됩니다.