python - 同步两个 QTreeWidgets
python - Synchronizing two QTreeWidgets
我在一个表单中有两个 QTreeWidget,一个没有子项,另一个有子项,如下面的屏幕截图所示。我希望每次选择左侧树中的项目时,右侧树在折叠时展开(如果展开则折叠)。
我尝试使用下面的代码实现此目的,我在其中将句柄函数连接到左侧列表的 itemSelectionChanged 事件。问题是 .collapse() 和 .expand() 方法需要一个 QIndexModel 参数(继承自 QTreeView),但是 QTreeWidget 使用我不知道如何访问的预定义模型。
有人可以帮我吗?
import sys
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.tree1 = QtGui.QTreeWidget(self)
self.tree2 = QtGui.QTreeWidget(self)
layout = QtGui.QHBoxLayout(self)
self.tree1.header().hide()
self.tree2.header().hide()
self.tree1.itemSelectionChanged.connect(self.handleSelected)
for text in 'A B C D'.split():
item = QtGui.QTreeWidgetItem(self.tree1, [text])
for text in '1 2 3 4'.split():
item = QtGui.QTreeWidgetItem(self.tree2, [text])
for text in 'red blue green'.split():
child = QtGui.QTreeWidgetItem(item, [text])
layout.addWidget(self.tree1)
layout.addWidget(self.tree2)
def handleSelected(self):
if self.tree2.isExpanded():
self.tree2.collapse()
else:
self.tree2.expand()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
树形小部件项目有一个 setExpanded method and an isSelected 方法,因此您需要做的就是遍历顶级项目并切换每个项目:
def handleSelected(self):
for index in range(self.tree1.topLevelItemCount()):
item1 = self.tree1.topLevelItem(index)
item2 = self.tree2.topLevelItem(index)
item2.setExpanded(item1.isSelected())
我在一个表单中有两个 QTreeWidget,一个没有子项,另一个有子项,如下面的屏幕截图所示。我希望每次选择左侧树中的项目时,右侧树在折叠时展开(如果展开则折叠)。
我尝试使用下面的代码实现此目的,我在其中将句柄函数连接到左侧列表的 itemSelectionChanged 事件。问题是 .collapse() 和 .expand() 方法需要一个 QIndexModel 参数(继承自 QTreeView),但是 QTreeWidget 使用我不知道如何访问的预定义模型。
有人可以帮我吗?
import sys
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.tree1 = QtGui.QTreeWidget(self)
self.tree2 = QtGui.QTreeWidget(self)
layout = QtGui.QHBoxLayout(self)
self.tree1.header().hide()
self.tree2.header().hide()
self.tree1.itemSelectionChanged.connect(self.handleSelected)
for text in 'A B C D'.split():
item = QtGui.QTreeWidgetItem(self.tree1, [text])
for text in '1 2 3 4'.split():
item = QtGui.QTreeWidgetItem(self.tree2, [text])
for text in 'red blue green'.split():
child = QtGui.QTreeWidgetItem(item, [text])
layout.addWidget(self.tree1)
layout.addWidget(self.tree2)
def handleSelected(self):
if self.tree2.isExpanded():
self.tree2.collapse()
else:
self.tree2.expand()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
树形小部件项目有一个 setExpanded method and an isSelected 方法,因此您需要做的就是遍历顶级项目并切换每个项目:
def handleSelected(self):
for index in range(self.tree1.topLevelItemCount()):
item1 = self.tree1.topLevelItem(index)
item2 = self.tree2.topLevelItem(index)
item2.setExpanded(item1.isSelected())