로그인

  • 목록
  • 아래로
  • 위로
  • 쓰기
  • 검색

정보&강의 QStacked Layout 으로 화면이 바뀌는 프로그램 구조


드디어 화면이 바뀌는 레이아웃이 나옴.

그걸 가능하게 하는 것이 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_()

 

 

 

 

 

 

 


이런 글도 찾아보세요!

공유

facebooktwitterpinterestbandkakao story
퍼머링크

댓글 0

권한이 없습니다. 로그인

신고

"님의 댓글"

이 댓글을 신고 하시겠습니까?

삭제

"님의 댓글"

이 댓글을 삭제하시겠습니까?