随笔 - 934, 文章 - 0, 评论 - 249, 阅读 - 345万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Qt之容器控件(QStackedWidget)

Posted on   蝈蝈俊  阅读(602)  评论(0编辑  收藏  举报

QStackedWidget提供了一个控件栈,在这个栈中,一次只能显示一个控件。这样我们就可以实现多页面之间的切换。

下面是一个例子:我们将创建3个单独的Python文件,分别表示3个独立的页面。然后,我们使用一个主窗口类来加载并切换这些页面。

首先,创建3个不同的Python文件,每个文件包含一个继承自QWidget的类,这些类分别定义了每个页面的UI和逻辑。

file1.py


# file1.py
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel

class PageOne(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        layout = QVBoxLayout(self)
        layout.addWidget(QLabel("This is page 1"))
        

file2.py


# file2.py
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel

class PageTwo(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        layout = QVBoxLayout(self)
        layout.addWidget(QLabel("This is page 2"))

file3.py

# file3.py
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel

class PageThree(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        layout = QVBoxLayout(self)
        layout.addWidget(QLabel("This is page 3"))

main.py

然后,创建一个主窗口类,该类将使用QStackedWidget来动态加载和切换页面。


# main.py
from PyQt5.QtWidgets import QMainWindow, QPushButton, QVBoxLayout, QWidget, QStackedWidget
from file1 import PageOne
from file2 import PageTwo
from file3 import PageThree

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.stacked_widget = QStackedWidget(self)

        self.page_one = PageOne()
        self.page_two = PageTwo()
        self.page_three = PageThree()

        self.stacked_widget.addWidget(self.page_one)
        self.stacked_widget.addWidget(self.page_two)
        self.stacked_widget.addWidget(self.page_three)

        layout = QVBoxLayout(self)
        layout.addWidget(self.stacked_widget)

        self.button = QPushButton("Next Page")
        self.button.clicked.connect(self.next_page)
        layout.addWidget(self.button)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def next_page(self):
        current_index = self.stacked_widget.currentIndex()
        if current_index < self.stacked_widget.count() - 1:
            self.stacked_widget.setCurrentIndex(current_index + 1)
        else:
            self.stacked_widget.setCurrentIndex(0)

if __name__ == '__main__':
    from PyQt5.QtWidgets import QApplication
    import sys

    app = QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit(app.exec_())


注意,为了使上述代码能正常工作,你需要确保所有Python文件都在同一目录下,或者在Python的搜索路径中。

运行main.py时,程序将显示PageOne。点击“Next Page”按钮,将在PageOne、PageTwo和PageThree之间进行切换。

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2012-05-23 loaded the "*****" nib but the view outlet was not set 错误的解决办法。
点击右上角即可分享
微信分享提示