Tabla de contenido
1. Clase de ventana principal encapsulada
Paso 1: encapsular la clase de ventana
Paso 2: agregue una interfaz de cajón
Paso 3: agregue el diseño relevante de la interfaz del cajón
Paso 4: haga clic en el disparador para cada interfaz de cajón
En segundo lugar, la clase de cajón empaquetado.
3. Programa de ingreso al programa
0x01 Prefacio:
Diseño del cajón (solo se muestra una interfaz a la vez)
Requiere módulo: QStackedLayout
El código completo consta de tres partes: clase de ventana principal encapsulada + clase de cajón encapsulado + programa de entrada de programa
Ideas:
1. Clase de ventana del paquete
2. Primero, hay una interfaz de cajón.
3. Luego hay varios cajones (interfaz) en la interfaz del cajón.
4. Encapsule varias clases de cajones independientes
1. Clase de ventana principal encapsulada
Paso 1: encapsular la clase de ventana
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.create_stack_layout()
self.init_ui()
Paso 2: agregue una interfaz de cajón
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.create_stack_layout()
self.init_ui()
#————————————————————————————————————————————————————————————————
# 下面为新增
def create_stack_layout(self):
# 创建堆叠(抽屉)布局
self.stacked_layout = QStackedLayout()
w1 = Window1()
w2 = Window2()
# 将2个添加到抽屉布局中
self.stacked_layout.addWidget(w1)
self.stacked_layout.addWidget(w2)
Paso 3: agregue el diseño relevante de la interfaz del cajón
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.create_stack_layout()
self.init_ui()
def create_stack_layout(self):
# 创建堆叠(抽屉)布局
self.stacked_layout = QStackedLayout()
w1 = Window1()
w2 = Window2()
# 将2个添加到抽屉布局中
self.stacked_layout.addWidget(w1)
self.stacked_layout.addWidget(w2)
#————————————————————————————————————————————————————————————————
# 下面为新增
def init_ui(self):
self.setWindowTitle('form')
self.setFixedSize(500,400)
# 先定义最外层的垂直布局(水平布局是QHBoxLayout)
container = QVBoxLayout() # 最外层布局器(命名为容器)
self.setLayout(container) # 设置显示最外层布局器 (布局器的应用)
# 创建要显示的子widget
widget = QWidget()
widget.setLayout(self.stacked_layout)
widget.setStyleSheet("background-color:grey;")
# 创建2个按钮,用来点击进行切换抽屉布局中的weight
btn_press1 = QPushButton("界面1")
btn_press2 = QPushButton("界面2")
# 给按钮添加事件 (点击后调用的函数)
btn_press1.clicked.connect(self.btn_pres1_clicked)
btn_press2.clicked.connect(self.btn_pres2_clicked)
# 将需要显示的控件添加到布局中
container.addWidget(widget)
container.addWidget(btn_press1)
container.addWidget(btn_press2)
Paso 4: haga clic en el disparador para cada interfaz de cajón
Primero establezca el valor de índice del diseño.
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.create_stack_layout()
self.init_ui()
def create_stack_layout(self):
self.stacked_layout = QStackedLayout()
w1 = Window1()
w2 = Window2()
self.stacked_layout.addWidget(w1)
self.stacked_layout.addWidget(w2)
def init_ui(self):
self.setWindowTitle('form')
self.setFixedSize(500, 400)
container = QVBoxLayout()
self.setLayout(container)
widget = QWidget()
widget.setLayout(self.stacked_layout)
widget.setStyleSheet("background-color:grey;")
btn_press1 = QPushButton("界面1")
btn_press2 = QPushButton("界面2")
btn_press1.clicked.connect(self.btn_press1_clicked)
btn_press2.clicked.connect(self.btn_press2_clicked)
container.addWidget(widget)
container.addWidget(btn_press1)
container.addWidget(btn_press2)
#————————————————————————————————————————————————————————————————
# 下面为新增
def btn_press1(self):
# 设置抽屉布局当前的索引值(即可切换到指定的weight)
self.stacked_layout.setCurrentIndex(0)
def btn_press2(self):
# 设置抽屉布局当前的索引值(即可切换到指定的weight)
self.stacked_layout.setCurrentIndex(1)
En segundo lugar, la clase de cajón empaquetado.
código:
class Window1(QWidget):
def __init__(self):
super().__init__()
QLabel("抽屉1内容", self)
self.setStyleSheet("background-color:green;")
class Window2(QWidget):
def __init__(self):
super().__init__()
QLabel("抽屉2内容", self)
self.setStyleSheet("background-color:red;")
3. Programa de ingreso al programa
código:
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
4. Código completo
código:
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit, QDesktopWidget, QHBoxLayout, QVBoxLayout, QGroupBox, QRadioButton, QGridLayout, QFormLayout, QStackedLayout
class Window1(QWidget):
def __init__(self):
super().__init__()
QLabel("抽屉1内容", self)
self.setStyleSheet("background-color:green;")
class Window2(QWidget):
def __init__(self):
super().__init__()
QLabel("抽屉2内容", self)
self.setStyleSheet("background-color:red;")
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.create_stack_layout()
self.init_ui()
def create_stack_layout(self):
self.stacked_layout = QStackedLayout()
w1 = Window1()
w2 = Window2()
self.stacked_layout.addWidget(w1)
self.stacked_layout.addWidget(w2)
def init_ui(self):
self.setWindowTitle('form')
self.setFixedSize(500, 400)
container = QVBoxLayout()
self.setLayout(container)
widget = QWidget()
widget.setLayout(self.stacked_layout)
widget.setStyleSheet("background-color:grey;")
btn_press1 = QPushButton("界面1")
btn_press2 = QPushButton("界面2")
btn_press1.clicked.connect(self.btn_press1_clicked)
btn_press2.clicked.connect(self.btn_press2_clicked)
container.addWidget(widget)
container.addWidget(btn_press1)
container.addWidget(btn_press2)
def btn_press1_clicked(self):
self.stacked_layout.setCurrentIndex(0)
def btn_press2_clicked(self):
self.stacked_layout.setCurrentIndex(1)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Efecto de ejemplo:
(interfaz 1)
(interfaz 2)