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之间进行切换。