반응형
1. 개요
QStackWidget 이 있고, 그 하위에 Qwidget 들이 여러개 포함되는 형태로 구성됨
똑같은 크기의 도화지에 여러개의 Widget을 전부 쌓아놓고
한번에 1개씩만 유저에게 보여주는 Widget이 stack Widget이다.
2. 하위 page 갯수 늘리기, 순서바꾸기
3. 현재 선택된 page 변경하는 메소드
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
#UI파일 연결
#단, UI파일은 Python 코드 파일과 같은 디렉토리에 위치해야한다.
form_class = uic.loadUiType("test_stack.ui")[0]
#화면을 띄우는데 사용되는 Class 선언
class WindowClass(QMainWindow, form_class) :
def __init__(self) :
super().__init__()
self.setupUi(self)
self.stackedWidget:QStackedWidget # class type 지정해주기
self.stackedWidget.setCurrentIndex(0)
if __name__ == "__main__" :
#QApplication : 프로그램을 실행시켜주는 클래스
app = QApplication(sys.argv)
#WindowClass의 인스턴스 생성
myWindow = WindowClass()
#프로그램 화면을 보여주는 코드
myWindow.show()
#프로그램을 이벤트루프로 진입시키는(프로그램을 작동시키는) 코드
app.exec_()
예시코드에서 핵심은
QStackedwidget 의 setCurrentIndex(페이지번호) 메소드이다.
적절한 버튼을 만들어서 setCurrentIndex 메소드를 호출하는 형태로 UI를 구성하면 될 것이다.
QT 디자이너 안쓴 코드 예시
import sys
from PyQt5.QtWidgets import *
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PyStock")
self.setGeometry(830, 100, 700, 700)
btn1 = QPushButton("Stack Page1",self)
btn1.move(500,0)
btn1.clicked.connect(self.btn_fun1)
btn2 = QPushButton("Stack Page2",self)
btn2.move(500,30)
btn2.clicked.connect(self.btn_fun2)
# Stack 생성
self.stack = QStackedWidget(self)
self.stack.setGeometry(0,0,500,500)
self.stack.setFrameShape(QFrame.Box)
# Stack에서 사용될 페이지로 위젯2개를 만들었음
self.stack.addWidget(QWidget())
self.stack.addWidget(QWidget())
# 0번 위젯에 트리2개를 넣음
tree1=QTreeWidget(self.stack.widget(0))
tree1.setGeometry(0, 0, 150, 100)
tree2=QTreeWidget(self.stack.widget(0))
tree2.setGeometry(0,120,150,100)
# 1번 위젯에
line=QLineEdit(self.stack.widget(1))
line.setGeometry(0,0,100,100)
btn_instack1 =QPushButton("1번 위젯 버튼 1",self.stack.widget(1))
btn_instack1.move(120,0)
btn_instack2= QPushButton("1번 위젯 버튼 2",self.stack.widget(1))
btn_instack2.move(120,30)
def btn_fun1(self):
self.stack.setCurrentIndex(0)
def btn_fun2(self):
self.stack.setCurrentIndex(1)
if __name__ == "__main__":
app = QApplication(sys.argv)
myWindow = MyWindow()
myWindow.show()
app.exec_()
핵심 메소드1 : QStackedWidget 를 사용해서 스택 위젯을 생성
핵심 메소드2 : QStackedWidget 클래스의 addWidget 메소드를 사용해서 위젯을 한 개씩 추가
핵심 메소드3 : QStackedWidget 클래스의 widget 메소드를 사용하면 각각의 페에지를 리턴받을 수 있다.
핵심 메소드4 : QStackedWidget 클래스의 setCurrentIndex() 메소드로 현재 GUI 창에 열려있는 Widget 뭘로할지
고르기
반응형
'프로그래밍 관련 > PyQt' 카테고리의 다른 글
Pyqt.splitter에 대하여 (0) | 2021.11.01 |
---|---|
PyQt. Drag & Drop에 대하여 (0) | 2021.11.01 |
PyQt - TreeWidget (0) | 2021.10.21 |
PyQt. Qt Designer 개요.사용방법 (1) | 2021.10.19 |
PyQt() Keyboard 이벤트, Keyboard인터럽트 pynput 라이브러리 (1) | 2021.09.16 |