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之间进行切换。
标签:
QT
, QStackedWidget
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2012-05-23 loaded the "*****" nib but the view outlet was not set 错误的解决办法。