以下是一个简单的示例代码:
from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeWidget, QTreeWidgetItem, QStackedWidget, QWidget, QLabel, QVBoxLayout
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建 treewidget 和 stackedwidget
self.tree_widget = QTreeWidget(self)
self.tree_widget.setHeaderHidden(True)
self.stacked_widget = QStackedWidget(self)
# 设置 treewidget 的根节点
root = QTreeWidgetItem(self.tree_widget)
root.setText(0, "Root")
# 添加 treewidget 的子节点和对应的 stackedwidget 页面
child1 = QTreeWidgetItem(root)
child1.setText(0, "Child1")
page1 = QWidget()
label1 = QLabel("Page 1")
layout1 = QVBoxLayout(page1)
layout1.addWidget(label1)
self.stacked_widget.addWidget(page1)
child2 = QTreeWidgetItem(root)
child2.setText(0, "Child2")
page2 = QWidget()
label2 = QLabel("Page 2")
layout2 = QVBoxLayout(page2)
layout2.addWidget(label2)
self.stacked_widget.addWidget(page2)
# 将 treewidget 和 stackedwidget 放在主窗口中
self.tree_widget.itemClicked.connect(self.on_tree_item_clicked)
central_widget = QWidget(self)
layout = QHBoxLayout(central_widget)
layout.addWidget(self.tree_widget)
layout.addWidget(self.stacked_widget)
self.setCentralWidget(central_widget)
def on_tree_item_clicked(self, item, column):
index = self.tree_widget.indexOfTopLevelItem(item)
if index >= 0:
self.stacked_widget.setCurrentIndex(index)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
这个示例代码创建了一个 QMainWindow,其中左侧是一个 QTreeWidget,右侧是一个 QStackedWidget。在 QTreeWidget 中添加根节点和子节点,每个子节点都对应一个 QWidget,将这些 QWidget 添加到 QStackedWidget 中。然后在 QTreeWidget 的 itemClicked 信号中设置当前显示的页面。