QLineEdit 在 setText 后不显示文本
QLineEdit does not show text after 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() 是“”。
编辑器是在 QStyledItemDelegate() 中创建的,带有用于 QTreeView() 的 createEditor()。
任何人都可以向我解释为什么会发生这种情况以及如何解决它吗?
如果您使用的是项目委托,则编辑器中显示的初始文本将从模型中提取,任何现有文本都将被覆盖。
要控制编辑前后发生的事情,请重新实现项目委托的 setEdtorData and setModelData 方法:
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)
我很难过。在下面的代码中:
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() 是“”。 编辑器是在 QStyledItemDelegate() 中创建的,带有用于 QTreeView() 的 createEditor()。
任何人都可以向我解释为什么会发生这种情况以及如何解决它吗?
如果您使用的是项目委托,则编辑器中显示的初始文本将从模型中提取,任何现有文本都将被覆盖。
要控制编辑前后发生的事情,请重新实现项目委托的 setEdtorData and setModelData 方法:
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)