2 votes

Comment mettre en évidence la sélection dans QTreeView de manière programmatique ?

Lorsque je choisis une sélection dans le QTreeView de manière programmatique en utilisant item_selected('Item2') la sélection est transmise au gestionnaire comme prévu. J'aimerais également que cet élément ait une sélection en surbrillance, mais je n'arrive pas à trouver la solution. Avez-vous une idée ?

from PyQt5.Qt import Qt
from PyQt5.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem
import sys

def item_selected(selection):
    try:
        print(selection.text(0))
    except AttributeError:
        print(selection)

app = QApplication(sys.argv)

TreeList = ({
    'Header1': (('Item1', 'Item2', )),
    'Header2': (('Item11', 'Item21', )),
})

tree = QTreeWidget()

for key, value in TreeList.items():
    parent = QTreeWidgetItem(tree, [key])
    for val in value:
        child = QTreeWidgetItem([val])
        child.setFlags(child.flags() | Qt.ItemIsUserCheckable)
        child.setCheckState(0, Qt.Unchecked)
        parent.addChild(child)

tree.itemClicked.connect(item_selected)

tree.show()

# SELECT AND HIGHLIGHT THIS ONE
item_selected('Item2')

sys.exit(app.exec_())

Désolé si le code ci-dessus est un désordre.

2voto

eyllanesc Points 79506

Vous ne devez pas utiliser le même slot, il reçoit un élément, et ne fait que l'imprimer, dans votre cas vous devez rechercher l'élément pour son texte et le sélectionner :

def item_selected(selection):
    print(selection.text(0))

app = QApplication(sys.argv)

TreeList = ({
    'Header1': (('Item1', 'Item2', )),
    'Header2': (('Item11', 'Item21', )),
})

tree = QTreeWidget()

for key, value in TreeList.items():
    parent = QTreeWidgetItem(tree, [key])
    for val in value:
        child = QTreeWidgetItem([val])
        child.setFlags(child.flags() | Qt.ItemIsUserCheckable)
        child.setCheckState(0, Qt.Unchecked)
        parent.addChild(child)

tree.itemClicked.connect(item_selected)

items = tree.findItems("Item2", Qt.MatchFixedString| Qt.MatchRecursive) 
[it.setSelected(True) for it in items]

tree.expandAll()
tree.show()

sys.exit(app.exec_())

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X