在 PyQt 中,可以通过将 QTreeWidget 和 QStackedWidget 绑定到同一个信号槽上来实现它们之间的联动。
首先,我们需要创建一个 QTreeWidget 并为其添加项,每个项都应该与一个特定的页面关联。接下来,我们需要创建一个 QStackedWidget,并为其添加与树中每个项关联的页面。
然后,我们需要连接 QTreeWidget 的 currentItemChanged 信号到一个新槽函数,该函数将会获取当前选中的项并将其对应的页面显示在 QStackedWidget 中。代码示例:
from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeWidget, QTreeWidgetItem, QStackedWidget, QVBoxLayout, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# Create Tree widget and add items
self.tree = QTreeWidget(self)
item1 = QTreeWidgetItem(["Page 1"])
item2 = QTreeWidgetItem(["Page 2"])
self.tree.addTopLevelItem(item1)
self.tree.addTopLevelItem(item2)
# Create stacked widget and add pages
self.stacked_widget = QStackedWidget(self)
page1 = QWidget(self.stacked_widget)
page2 = QWidget(self.stacked_widget)
self.stacked_widget.addWidget(page1)
self.stacked_widget.addWidget(page2)
# Connect tree widget to stacked widget
self.tree.currentItemChanged.connect(self.change_page)
# Add widgets to main window layout
layout = QVBoxLayout()
layout.addWidget(self.tree)
layout.addWidget(self.stacked_widget)
central_widget = QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
def change_page(self, current, previous):
index = self.tree.indexOfTopLevelItem(current)
self.stacked_widget.setCurrentIndex(index)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
在这个示例中,我们创建了一个包含两个项的 QTreeWidget,并且与每个项相关联的页面在 QStackedWidget 中被添加。然后,我们连接了 QTreeWidget 的 currentItemChanged 信号到 change_page() 槽上,在该槽函数中我们获取当前选中项的索引,并将对应页面显示在 QStackedWidget 中。
当用户选择不同的项时,QStackedWidget 将会切换到相应的页面。