2015-01-10 1 views
1

내가 곤충에 빠졌습니다. 아래의 코드에서 :QLineEdit은 setText 이후에 텍스트를 표시하지 않습니다.

class LineEdit(QtGui.QLineEdit): 

def __init__(self, value="", parent=None, commit=None): 
    super(LineEdit, self).__init__(parent=parent) 
    self.setText("blabla") 
    self.commit = commit 
    self.editingFinished.connect(self.on_change) 
    print self.text() 

self.text() "()"입니다 "blabla"하지만 LineEdit 텍스트와 self.text을 편집 한 후 표시되지 않습니다. 편집기는 QTreeView()에 대한 createEditor()를 사용하여 QStyledItemDelegate()에서 작성됩니다.

왜 이런 일이 일어나고 어떻게 해결할 수 있습니까?

+0

당신은 더 많은 코드를 제공 할 수 있으며 일부 출력은 당신이 인쇄? – ProgrammingIsAwsome

답변

4

항목 위임자를 사용하는 경우 편집기에 표시된 초기 텍스트가 모델에서 가져오고 기존 텍스트를 덮어 씁니다.

전에 편집 한 후 무엇을 제어하려면, 항목 위임의 setEdtorDatasetModelData 방법을 구현할 :

class Delegate(QtGui.QStyledItemDelegate): 
    def createEditor(self, parent, option, index): 
     if index.column() < 2: 
      return LineEdit(parent) 
     return super(Delegate, self).createEditor(parent, option, index) 

    def setEditorData(self, editor, index): 
     if index.column() == 0: 
      editor.setText('blabla') 
     elif index.column() == 1: 
      editor.setText(index.data().toString()) 
      # Python 3 
      # editor.setText(index.data()) 
     else: 
      super(Delegate, self).setEditorData(editor, index) 

    def setModelData(self, editor, model, index): 
     if index.column() < 2: 
      value = editor.text() 
      print(value) 
      model.setData(index, value, QtCore.Qt.EditRole) 
     else: 
      super(Delegate, self).setModelData(editor, model, index) 
+0

분명하고 적어도 하나의 다른 문제를 해결했습니다. 문서에서 불분명합니다. – Lars

관련 문제