pyqt5 单窗口多页面
时间: 2023-09-06 19:05:30 浏览: 122
使用PyQt5实现单窗口多页面可以通过QStackedWidget控件来实现。QStackedWidget是一个堆栈窗口部件,可以用于在同一个窗口中显示多个页面,并根据需要进行页面的切换。
首先,导入PyQt5的相关模块和类:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QStackedWidget, QPushButton
```
然后,创建一个继承自QMainWindow的主窗口类:
```python
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("单窗口多页面示例")
self.central_widget = QWidget(self)
self.layout = QVBoxLayout(self.central_widget)
self.stacked_widget = QStackedWidget(self.central_widget)
self.layout.addWidget(self.stacked_widget)
self.setCentralWidget(self.central_widget)
```
接着,定义各个页面的类,每个页面都需要继承自QWidget并包含控件和事件处理函数:
```python
class Page1(QWidget):
def __init__(self):
super().__init__()
self.button = QPushButton("切换到页面2", self)
self.button.clicked.connect(self.switch_page)
layout = QVBoxLayout(self)
layout.addWidget(self.button)
def switch_page(self):
main_window.stacked_widget.setCurrentIndex(1)
class Page2(QWidget):
def __init__(self):
super().__init__()
self.button = QPushButton("切换到页面1", self)
self.button.clicked.connect(self.switch_page)
layout = QVBoxLayout(self)
layout.addWidget(self.button)
def switch_page(self):
main_window.stacked_widget.setCurrentIndex(0)
```
最后,在主程序中进行页面的初始化和显示:
```python
if __name__ == "__main__":
app = QApplication([])
main_window = MainWindow()
page1 = Page1()
page2 = Page2()
main_window.stacked_widget.addWidget(page1)
main_window.stacked_widget.addWidget(page2)
main_window.stacked_widget.setCurrentIndex(0)
main_window.show()
app.exec()
```
以上代码创建了一个包含两个页面的单窗口应用程序。点击页面1中的按钮可以切换到页面2,点击页面2中的按钮可以切换回页面1。
阅读全文