"懒加载"示例

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())
posted @ 2025-12-24 21:14  华小电  阅读(6)  评论(0)    收藏  举报