2017-10-15 2 views
1

Ich habe zwei QTreeWidget in einem Formular, eines ohne Kinder, das andere mit Kindern, wie im Screenshot unten dargestellt. Ich möchte, dass der rechte Baum erweitert wird, wenn er ausgeblendet (und ausgeblendet wird, wenn er erweitert wird), jedes Mal, wenn ein Element in der linken Baumstruktur ausgewählt wird.Python - Synchronisieren von zwei QTreeWidgets

enter image description here

Ich habe versucht, dies unten mit dem Code zu erreichen, wo ich einen Griff Funktion zum ItemSelectionChanged Ereignisse der linken Liste zu verbinden. Das Problem besteht darin, dass die Methoden .collapse() und .expand() einen QIndexModel-Parameter (von QTreeView geerbt) erfordern, aber QTreeWidget ein vordefiniertes Modell verwendet, auf das ich nicht zugreifen kann.

Kann jemand da draußen mir die Hand geben?

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

Antwort

1

Die baum Widget Gegenstände haben eine setExpanded Verfahren und eine isSelected Methode, so alles, was Sie tun müssen, ist Iterierte über die Top-Level-Elemente und wechseln jedes:

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

Danke @ Ekhumoro, es funktioniert jetzt gut! Prost. – maurobio

Verwandte Themen