您现在的位置是:网站首页 > 博客日记 >

Pyside2延迟加载选项卡内容

作者:YXN-python 阅读量:121 发布日期:2024-10-26

import sys
from PySide2.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QLabel


class LazyLoadingTabWidget(QTabWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.tabBarClicked.connect(self.load_tab_content)

        # 创建标签页
        self.first_tab = QWidget()
        self.first_tab.setLayout(QVBoxLayout())  # 设置空的 QVBoxLayout

        self.second_tab = QWidget()
        self.second_tab.setLayout(QVBoxLayout())  # 设置空的 QVBoxLayout

        self.addTab(self.first_tab, '选项 1')
        self.addTab(self.second_tab, '选项 2')

        # 设置标签的宽高
        self.setStyleSheet("""
            QTabBar::tab {
                width: 100px;
                height: 40px;
            }
        """)

    # 加载标签页内容
    def load_tab_content(self, index):
        if index == 0:
            self.parent().load_first_tab_content()
        elif index == 1:
            self.parent().load_second_tab_content()


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('延迟加载标签示例')
        self.setGeometry(100, 100, 800, 600)

        self.tab_widget = LazyLoadingTabWidget(self)
        self.setCentralWidget(self.tab_widget)

        # 初始加载第一个标签页内容
        self.load_first_tab_content()

    def load_first_tab_content(self):
        layout = self.tab_widget.first_tab.layout()
        if layout.count() == 0:
            print('这是第一个选项卡的内容')
            label = QLabel("这是第一个选项卡的内容")
            layout.addWidget(label)

    def load_second_tab_content(self):
        layout = self.tab_widget.second_tab.layout()
        if layout.count() == 0:
            print('这是第二个选项卡的内容,当用户点击选项卡时,才加载该选项卡的内容。')
            label = QLabel("这是第二个选项卡的内容,当用户点击选项卡时,才加载该选项卡的内容。")
            layout.addWidget(label)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_win = MainWindow()
    main_win.show()
    sys.exit(app.exec_())

YXN-python

2024-10-26