首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python -同步两个QTreeWidgets

python -同步两个QTreeWidgets
EN

Stack Overflow用户
提问于 2017-10-15 12:40:04
回答 1查看 117关注 0票数 1

我有两个QTreeWidget的形式,一个没有孩子,另一个有孩子,如下面的截图所示。我希望在右树被折叠时展开它(如果它是展开的话则是折叠的),每次选择左边树中的项时。

我试图通过下面的代码来实现这一点,在这里,我将一个句柄函数连接到左侧列表的itemSelectionChanged事件。问题是.collapse()和.expand()方法需要一个QIndexModel参数(从QTreeView继承),但是QTreeWidget使用预定义的模型,我不知道如何访问该模型。

外面有人能帮我吗?

代码语言:javascript
运行
复制
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_())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-15 14:30:16

树小部件项有一个setExpanded方法和一个isSelected方法,所以您所需要做的就是遍历顶级项并切换每个条目:

代码语言:javascript
运行
复制
def handleSelected(self):
    for index in range(self.tree1.topLevelItemCount()):
        item1 = self.tree1.topLevelItem(index)
        item2 = self.tree2.topLevelItem(index)
        item2.setExpanded(item1.isSelected())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46755141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档