如何让pyqt5中的子类组件绕过centralwidget直接继承mainwindow
时间: 2024-05-05 18:16:22 浏览: 115
要让子类组件绕过centralwidget直接继承mainwindow,可以使用QStackedWidget来实现。QStackedWidget是一个堆栈窗口部件,可以在其中包含多个子窗口部件,但只有一个子窗口部件被显示。可以通过切换不同的子窗口部件来实现窗口内容的切换。
以下是一个示例代码,其中一个子窗口部件是继承自MainWindow的MyWidget,另一个子窗口部件是普通的QWidget:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget, QWidget, QPushButton, QLabel
class MyWidget(QMainWindow):
def __init__(self):
super().__init__()
self.label = QLabel('Hello World', self)
self.label.move(50, 50)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.stacked_widget = QStackedWidget(self)
self.setCentralWidget(self.stacked_widget)
self.my_widget = MyWidget()
self.stacked_widget.addWidget(self.my_widget)
self.other_widget = QWidget()
self.button = QPushButton('Switch', self.other_widget)
self.button.clicked.connect(self.switch_widget)
self.label = QLabel('This is another widget', self.other_widget)
self.label.move(50, 50)
self.stacked_widget.addWidget(self.other_widget)
def switch_widget(self):
if self.stacked_widget.currentWidget() == self.my_widget:
self.stacked_widget.setCurrentWidget(self.other_widget)
else:
self.stacked_widget.setCurrentWidget(self.my_widget)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
在这个示例代码中,MainWindow中的centralWidget被设置为空,然后通过QStackedWidget来管理不同的子窗口部件。MyWidget继承自MainWindow,但它不需要被放置在centralWidget中,而是直接被添加到QStackedWidget中。另一个子窗口部件是普通的QWidget,它包含一个QPushButton和一个QLabel,用于切换到不同的子窗口部件。通过setCurrentWidget方法来切换当前显示的子窗口部件。
阅读全文