2017-10-15 7 views
1

J'ai deux QTreeWidget dans un formulaire, l'un sans enfants, l'autre avec enfants comme illustré dans la capture d'écran ci-dessous. Je veux que l'arborescence droite soit développée si elle est réduite (et réduite si elle est développée), chaque fois qu'un élément de l'arborescence de gauche est sélectionné.python - Synchronisation de deux QTreeWidgets

enter image description here

J'ai essayé d'y parvenir avec le code ci-dessous, où je me connecte une fonction de poignée à l'événement itemSelectionChanged de la liste de gauche. Le problème est que les méthodes .collapse() et .expand() nécessitent un paramètre QIndexModel (hérité de QTreeView), mais QTreeWidget utilise un modèle prédéfini auquel je ne sais pas comment accéder.

Quelqu'un peut-il me donner la main?

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_()) 

Répondre

1

Les éléments-widget arbres ont une méthode setExpanded et une méthode isSelected, donc tout ce que vous devez faire est de parcourir les éléments de haut niveau et basculer chacun:

def handleSelected(self): 
    for index in range(self.tree1.topLevelItemCount()): 
     item1 = self.tree1.topLevelItem(index) 
     item2 = self.tree2.topLevelItem(index) 
     item2.setExpanded(item1.isSelected()) 
+0

Merci, @ ekhumoro, ça marche bien maintenant! À votre santé. – maurobio