2016-05-27 8 views
0

enter image description hereКак редактировать QTreeWidgetItem когда редактируемые

Когда элемент двойного щелчка и пользователь вводит новое имя элемента, я хочу это текстовое значение, чтобы быть присвоено атрибутом item._name, который напечатан onClick. Как достичь этого?

from PyQt4 import QtCore, QtGui 
app = QtGui.QApplication([]) 

class Tree(QtGui.QTreeWidget): 
    def __init__(self, *args, **kwargs): 
     super(Tree, self).__init__() 
     for i, item_name in enumerate(['Item_1','Item_2','Item_3','Item_4','Item_5']): 
      rootItem = QtGui.QTreeWidgetItem() 
      rootItem.setFlags(rootItem.flags() | QtCore.Qt.ItemIsEditable) 
      rootItem._name = 'Root %s'%i 
      rootItem.setText(0, rootItem._name)  

      for number in range(3): 
       childItem = QtGui.QTreeWidgetItem(rootItem) 
       childItem.setFlags(rootItem.flags() | QtCore.Qt.ItemIsEditable) 
       childItem._name = 'Child %s'%number 
       childItem.setText(0, childItem._name) 

      self.addTopLevelItem(rootItem) 
     self.clicked.connect(self.onClick) 
     self.show() 
    def onClick(self, index): 
     print self.currentItem()._name 

tree=Tree() 
app.exec_() 

ответ

0

enter image description here

Подкласс QTreeWidgetItem. Определить метод setData для присвоения значения атрибуту _name.

from PyQt4 import QtCore, QtGui 
app = QtGui.QApplication([]) 

class TreeWidgetItem(QtGui.QTreeWidgetItem): 
    def __init__(self, parent=None): 
     super(TreeWidgetItem, self).__init__(parent) 

    def setData(self, column, role, value): 
     super(TreeWidgetItem, self).setData(column, role, value) 
     self._name = value.toString() 

class Tree(QtGui.QTreeWidget): 
    def __init__(self, *args, **kwargs): 
     super(Tree, self).__init__() 
     for i, item_name in enumerate(['Item_1','Item_2','Item_3','Item_4','Item_5']): 
      rootItem = TreeWidgetItem(self) 
      rootItem.setFlags(rootItem.flags() | QtCore.Qt.ItemIsEditable) 
      rootItem._name = 'Root %s'%i 
      rootItem.setText(0, rootItem._name)  

      for number in range(3): 
       childItem = TreeWidgetItem(rootItem) 
       childItem.setFlags(rootItem.flags() | QtCore.Qt.ItemIsEditable) 
       childItem._name = 'Child %s'%number 
       childItem.setText(0, childItem._name) 

      self.addTopLevelItem(rootItem) 

     self.clicked.connect(self.onClick) 
     self.show() 

    def onClick(self, index): 
     print self.currentItem()._name 

 Смежные вопросы

  • Нет связанных вопросов^_^