2016-08-26 7 views
0

私は1つ以上の親を持つTreeWidgetを持っています。それぞれの子は可変数です。ツリーには、最初に(実際のアプリケーションのデータベースのデータを使用して)データが格納されます。私は、ユーザーが1つまたは複数の子供を各親に追加したり、現在選択されている子供を編集したりすることができるようにしたいと考えていますが、その方法を理解することはできません。PyQt:子を動的にTreeWidgetに追加する

以下は私のサンプルコードで、親と5人の子供がいるツリーを構築しています。フォームは、 "Return"と "Ins"キーをインターセプトし、テキストを新しい子として入力するか、または現在選択されている子を編集するための簡単なデータ入力ダイアログを呼び出します。ここで私は2つの問題にぶつかりました:まず、編集のために現在選択されている子供のテキストを取得する方法は?次に、入力テキストを新しい子として使用する方法(サンプルコードでは、入力したテキストをツリーの親レベルに追加することしかできませんでした)。

私はいつものように、あなたが提供できる援助のために大変感謝します。

答えて

2

選択した要素を取得するには、選択した要素を返す関数{your QTreeWidget}.selectedItems()を使用します。

あなたの場合、選択はモード:SingleSelectionでなければなりません。

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 


class MyMainWindow(QMainWindow): 
    def __init__(self, parent=None): 
     super(MyMainWindow, self).__init__(parent) 
     self.tree = QTreeWidget(self) 

     self.tree.setSelectionMode(QAbstractItemView.SingleSelection) 

     insertKey = QShortcut(QKeySequence(Qt.Key_Insert), self.tree) 
     insertKey.activated.connect(self.itemInsert) 
     editKey = QShortcut(QKeySequence(Qt.Key_Return), self.tree) 
     editKey.activated.connect(self.itemEdit) 
     self.setCentralWidget(self.tree) 
     self.tree.setHeaderLabel('Tree') 
     i = QTreeWidgetItem(self.tree, ['Parent']) 
     self.tree.addTopLevelItem(i) 
     for x in range(5): 
      QTreeWidgetItem(i, ['Child {}'.format(x)]) 

    def itemInsert(self): 
     text, ok = QInputDialog.getText(self, "Add Child", "Enter child name:") 
     if ok and text != "": 
      if len(self.tree.selectedItems()) > 0: 
       QTreeWidgetItem(self.tree.selectedItems()[0], [text]) 
      else: 
       QTreeWidgetItem(self.tree, [text]) 

    def itemEdit(self): 
     if len(self.tree.selectedItems()) > 0: 
      item = self.tree.selectedItems()[0] 
      text, ok = QInputDialog.getText(self, "Edit Child", "Modify name:", QLineEdit.Normal, item.text(0)) 
      if ok and text != "": 
       item.setText(0, text) 


if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    ui = MyMainWindow() 
    ui.show() 
    sys.exit(app.exec_()) 
関連する問題