You have two options.
You can create a QItemDelegate
and override the createEditor
, setEditorData
and setModelData
to control the widget they're presented with to edit the data. You can create a QLineEdit
with a validator if you'd like, but if they can only enter a number, you should probably just use a QSpinBox
or QDoubleSpinBox
, which only allow integers and floats. Alternatively, you could let them enter whatever they want and then in the setModelData
function just ignore any entered values that aren't valid numbers.
class MyDelegate(QtGui.QItemDelegate):
def createEditor(self, parent, option, index):
return QtGui.QSpinBox(parent)
delegate = MyDelegate()
table.setItemDelegate(delegate)
Or, a slightly easier solution if the items in your table already have numbers, just assign an integer or float to the EditData
role for the item. Qt
will notice the class type and automatically construct a QSpinBox
or QDoubleSpinBox
for you.
item = QTableWidgetItem()
item.setData(QtCore.Qt.EditRole, 5)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…