카테고리 없음

[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에 추가해주면 각각의 탭으로 구분됩니다.