选择子项作为树中的当前项

2024-04-26 23:03:10 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑下面的完全展开的玩具树,在这里我做{{CD1}}当前根:

from PyQt5 import QtWidgets

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.setMinimumHeight(300)
        self.setMinimumWidth(100)

        my_tree = QtWidgets.QTreeWidget(self)
        my_tree.resize(100, 300)

        alpha = QtWidgets.QTreeWidgetItem(my_tree, ['Alpha'])
        beta = QtWidgets.QTreeWidgetItem(my_tree, ['Beta'])

        alpha.addChild(QtWidgets.QTreeWidgetItem(['one']))
        alpha.addChild(QtWidgets.QTreeWidgetItem(['two']))

        beta.addChild(QtWidgets.QTreeWidgetItem(['first']))
        beta.addChild(QtWidgets.QTreeWidgetItem(['second']))

        my_tree.expandAll()
        my_tree.setCurrentItem(my_tree.topLevelItem(0))

        self.show()

app = QtWidgets.QApplication([])
window = MainWindow()
app.exec_()

如何使Alpha(即one)的第一个子项成为当前和选定的项,同时也只扩展Beta而不是两个根


Tags: selfalphatreeappinitmyonebeta
1条回答
网友
1楼 · 发布于 2024-04-26 23:03:10

可以使用setExpanded()展开或折叠项:

alpha.setExpanded(False)

我刚刚注意到您的代码中有my_tree.expandAll()。如果要折叠其中一个项目,请在.expandAll()之后使用item.setExpanded(False)

要将alpha中的第一个子项设置为选定项,请使用:

alpha.child(0).setSelected(True)
print(alpha.child(0).isSelected()) #verify it's selected

在代码中放置它们的位置:

.
.
        beta.addChild(QtWidgets.QTreeWidgetItem(['first']))
        beta.addChild(QtWidgets.QTreeWidgetItem(['second']))

        my_tree.expandAll()
        my_tree.setCurrentItem(my_tree.topLevelItem(0))

        alpha.setExpanded(False)
        alpha.child(0).setSelected(True)
        print(alpha.child(0).isSelected())  # verify it's selected

        self.show()

要在选择更改时运行函数,请尝试以下代码,它将打印所选项目或子项的文本(将其置于self.show之前):

my_tree.itemSelectionChanged.connect(lambda: selected_item())

def selected_item():
    getSelected = my_tree.selectedItems()
    if getSelected:
        baseNode = getSelected[0]
        getChildNode = baseNode.text(0)
        print(getChildNode)

相关问题 更多 >