Выбор ребенка в качестве текущего элемента в дереве - PullRequest
1 голос
/ 26 апреля 2020

Рассмотрим следующее полностью развернутое дерево игрушек, где я делаю Alpha текущим root:

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 вместо обоих корней?

1 Ответ

1 голос
/ 26 апреля 2020

Вы можете использовать setExpanded (), чтобы развернуть или свернуть элемент:

alpha.setExpanded(False)

Я только что заметил, что в вашем коде my_tree.expandAll(). Если вы хотите свернуть один из элементов, используйте item.setExpanded(False) ПОСЛЕ .expandAll()

. Чтобы установить первый дочерний элемент в альфа-формате, выберите:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...