可以通过以下步骤将 QTreeWidget 与 QStackedWidget 关联,实现点击一个节点就切换一个 QStackedWidget 的功能:
创建一个 QTreeWidget 和 QStackedWidget 对象,并将它们添加到窗口中。
将 QTreeWidget 的 currentItemChanged 信号连接到槽函数,用于处理当用户点击树节点时进行的操作。
在该槽函数中获取所选树节点的索引,然后使用 QStackedWidget 的 setCurrentIndex() 函数将其对应的页面显示出来。
下面是一个简单的示例代码,演示如何实现这个功能:
# 导入必要的模块
from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeWidget, QTreeWidgetItem, QStackedWidget, QLabel, QHBoxLayout, QWidget
# 创建主窗口类
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建 QTreeWidget 和 QStackedWidget
self.tree_widget = QTreeWidget(self)
self.stacked_widget = QStackedWidget(self)
# 添加页面到 QStackedWidget 中
page1 = QWidget(self.stacked_widget)
layout1 = QHBoxLayout()
label1 = QLabel('Page 1', page1)
layout1.addWidget(label1)
page1.setLayout(layout1)
self.stacked_widget.addWidget(page1)
page2 = QWidget(self.stacked_widget)
layout2 = QHBoxLayout()
label2 = QLabel('Page 2', page2)
layout2.addWidget(label2)
page2.setLayout(layout2)
self.stacked_widget.addWidget(page2)
page3 = QWidget(self.stacked_widget)
layout3 = QHBoxLayout()
label3 = QLabel('Page 3', page3)
layout3.addWidget(label3)
page3.setLayout(layout3)
self.stacked_widget.addWidget(page3)
# 添加树节点到 QTreeWidget 中
root = QTreeWidgetItem(self.tree_widget)
root.setText(0, 'Root')
for i in range(3):
child = QTreeWidgetItem(root)
child.setText(0, f'Child {i}')
# 将 QTreeWidget 和 QStackedWidget 添加到窗口中
self.tree_widget.setGeometry(0, 0, 200, 400)
self.stacked_widget.setGeometry(200, 0, 400, 400)
self.setCentralWidget(self.stacked_widget)
self.addDockWidget(Qt.LeftDockWidgetArea, self.tree_widget)
# 连接信号和槽函数
self.tree_widget.currentItemChanged.connect(self.change_page)
# 切换页面的槽函数
def change_page(self, current, previous):
if current is None: # 如果没有选中任何节点,则返回
return
index = current.parent().indexOfChild(current) - 1
if index >= 0:
self.stacked_widget.setCurrentIndex(index)
# 创建应用程序对象并运行主循环
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
在上面的示例代码中,我们创建了一个包含三个页面的 QStackedWidget,并将其添加到窗口中。同时,我们使用 QTreeWidget 创建了一个树形结构,其中每个节点代表一个页面。当用户点击树节点时,我们会获取该节点的索引,并使用 QStackedWidget 的 setCurrentIndex() 函数将对应的页面显示出来。
需要注意的是,我们在树节点上设置了一个父节点“Root”,并在槽函数中使用 parent() 函数获取其父节点。另外,我们还通过计算子节点在父节点中的索引来确定要切换到哪个页面。