在PyQt5中,QStackedWidget
是一个可以包含多个子窗口(通常是 QWidget
或其子类)的容器,这些子窗口被堆叠在一起,一次只能显示一个。QStackedWidget
本身并不直接支持从另一个 Python 文件引入布局,但你可以通过一些方法实现这个效果。
一种常见的方法是,在另一个 Python 文件中定义并创建一个 QWidget
(或任何 QWidget
的子类)的实例,然后在你的主 Python 文件中将这个实例添加到 QStackedWidget
中。这样就可以在另一个文件中定义和布局界面,然后在需要的时候将其引入。
在another_layout.py
文件中定义一个 QWidget
的子类,并进行布局:
# another_layout.py
from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout
class AnotherLayout(QWidget):
def __init__(self, parent=None):
super(AnotherLayout, self).__init__(parent)
self.initUI()
def initUI(self):
# 创建一个垂直布局
vbox = QVBoxLayout()
# 创建一个标签并添加到布局中
label = QLabel('这是从另一个文件引入的布局')
vbox.addWidget(label)
# 设置这个窗口的布局为 vbox
self.setLayout(vbox)
然后,在主 Python 文件中,创建 AnotherLayout
的实例,并将其添加到 QStackedWidget
中:
# main.py
from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget
import sys
import another_layout
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建一个 QStackedWidget
self.stackedWidget = QStackedWidget(self)
self.setCentralWidget(self.stackedWidget)
# 创建另一个布局的实例并添加到 QStackedWidget 中
another_layout_instance = another_layout.AnotherLayout()
self.stackedWidget.addWidget(another_layout_instance)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
这样就可以在 QStackedWidget
中显示从另一个 Python 文件引入的布局。需要切换 QStackedWidget
中的页面时,使用 setCurrentIndex
方法。