import sys
from PySide6.QtWidgets import (
QApplication, QMainWindow, QWidget, QHBoxLayout, QVBoxLayout,
QPushButton, QStackedWidget, QLabel
)
from PySide6.QtCore import Qt
# pages
class HomePage(QWidget):
def __init__(self):
super().__init__()
self.setLayout(QVBoxLayout())
self.layout().addWidget(QLabel("🏠 首页内容"))
class SettingsPage(QWidget):
def __init__(self):
super().__init__()
self.setLayout(QVBoxLayout())
self.layout().addWidget(QLabel("⚙️ 设置页面"))
class AboutPage(QWidget):
def __init__(self):
super().__init__()
self.setLayout(QVBoxLayout())
self.layout().addWidget(QLabel("ℹ️ 关于我们"))
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
# 页面字典
self.page_dicts = {
"home": HomePage,
"settings": SettingsPage,
"about": AboutPage,
}
self.page_instances = {} # 缓存已创建的页面
# 默认显示首页
self.switch_page("home")
self.btn_click()
def initUI(self):
self.setWindowTitle("Lazy Loading")
self.resize(600, 400)
central = QWidget()
main_layout = QHBoxLayout(central)
self.setCentralWidget(central)
# ===== 左侧:按钮菜单 =====
left_widget = QWidget()
left_widget.setFixedWidth(120)
menu_layout = QVBoxLayout()
self.btn_home = QPushButton("首页")
self.btn_settings = QPushButton("设置")
self.btn_about = QPushButton("关于")
menu_layout.addWidget(self.btn_home)
menu_layout.addWidget(self.btn_settings)
menu_layout.addWidget(self.btn_about)
menu_layout.addStretch() # 推按钮到顶部
main_layout.addWidget(left_widget)
left_widget.setLayout(menu_layout)
# ===== 右侧:内容区 =====
self.stacked_widget = QStackedWidget()
main_layout.addWidget(self.stacked_widget)
def btn_click(self):
# 绑定点击事件(统一用 lambda 传参)
self.btn_home.clicked.connect(lambda: self.switch_page("home"))
self.btn_settings.clicked.connect(lambda: self.switch_page("settings"))
self.btn_about.clicked.connect(lambda: self.switch_page("about"))
def switch_page(self, page_key):
if page_key not in self.page_instances: #
page_class = self.page_dicts[page_key]
page_instance = page_class()
self.page_instances[page_key] = page_instance
self.stacked_widget.addWidget(page_instance)
# 切换显示
self.stacked_widget.setCurrentWidget(self.page_instances[page_key])
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec())