정보&강의 QStacked Layout 으로 화면이 바뀌는 프로그램 구조
- 운영자
- 348
- 0
드디어 화면이 바뀌는 레이아웃이 나옴.
그걸 가능하게 하는 것이 QStackedLayout() 함수임.
Stacked Layout = 한 프로그램의 레이아웃에 위젯을 Stacked (쌓아둠)하고 이벤트로 인덱스 순위를 변경하여 최상위로 노출시키는 구조
아래는 위젯 3개가 Stacked 되어 있는 예제임.
import sys from PySide2.QtWidgets import * class Form(QWidget): def __init__(self): super(Form, self).__init__() # 첫번째 widget 생성 self.wgtA = QWidget() self.wgtA_vl = QVBoxLayout() self.btnA = QPushButton("A") self.btnB = QPushButton("B") self.btnC = QPushButton("C") self.wgtA_vl.addWidget(self.btnA) self.wgtA_vl.addWidget(self.btnB) self.wgtA_vl.addWidget(self.btnC) self.wgtA.setLayout(self.wgtA_vl) # 두번째 widget 생성 self.wgt1 = QWidget() self.wgt1_vl = QVBoxLayout() self.btn1 = QPushButton("1") self.btn2 = QPushButton("2") self.btn3 = QPushButton("3") self.wgt1_vl.addWidget(self.btn1) self.wgt1_vl.addWidget(self.btn2) self.wgt1_vl.addWidget(self.btn3) self.wgt1.setLayout(self.wgt1_vl) # 세번째 widget 생성 self.wgt가 = QWidget() self.wgt가_vl = QVBoxLayout() self.btn가 = QPushButton("가") self.btn나 = QPushButton("나") self.btn다 = QPushButton("다") self.wgt가_vl.addWidget(self.btn가) self.wgt가_vl.addWidget(self.btn나) self.wgt가_vl.addWidget(self.btn다) self.wgt가.setLayout(self.wgt가_vl) # 생성된 위젯을 한꺼번에 쌓아서 보여줄 StackedLayout을 생성하고 위젯으로 추가함 self.layout = QStackedLayout() self.layout.addWidget(self.wgtA) self.layout.addWidget(self.wgt1) self.layout.addWidget(self.wgt가) # Stacked된 layout을 현재 창의 메인 layout으로 설정함. self.setLayout(self.layout) # 버튼에 이벤트 연결함. lambda 사용, 매개변수 s, i 사용, self. 사용 self.btnA.clicked.connect(lambda s=None, i=0: self.set_stack_index(s, i)) self.btnB.clicked.connect(lambda s=None, i=1: self.set_stack_index(s, i)) self.btnC.clicked.connect(lambda s=None, i=2: self.set_stack_index(s, i)) self.btn1.clicked.connect(lambda s=None, i=0: self.set_stack_index(s, i)) self.btn2.clicked.connect(lambda s=None, i=1: self.set_stack_index(s, i)) self.btn3.clicked.connect(lambda s=None, i=2: self.set_stack_index(s, i)) self.btn가.clicked.connect(lambda s=None, i=0: self.set_stack_index(s, i)) self.btn나.clicked.connect(lambda s=None, i=1: self.set_stack_index(s, i)) self.btn다.clicked.connect(lambda s=None, i=2: self.set_stack_index(s, i)) def set_stack_index(self, s, i): # setCurrentIndex() 메소드로 위젯 변환 self.layout.setCurrentIndex(i) app = QApplication(sys.argv) form = Form() form.show() app.exec_()
이런 글도 찾아보세요!
댓글 0
권한이 없습니다. 로그인