使用QItemDelegate在表视图中设置spinBox控件
参考文章:
PyQt - 如何使用QItemDelegate在表视图中设置QComboBox
QT Spin Box Delegate Example 看看看~
效果图
代码
步骤1:
from PyQt5.QtWidgets import QItemDelegate, QSpinBox
步骤2:
# 设置表格的第二列双击弹出SpinBox控件
self.tableWidget.setItemDelegateForColumn(1, SpinBoxDelegate(self.tableWidget, 'V'))
# 设置表格的第三列双击弹出SpinBox控件
self.tableWidget.setItemDelegateForColumn(2, SpinBoxDelegate(self.tableWidget, 'Hz'))
步骤3:使用QItemDelegate创建SpinBoxDelegate,并重写createEditor、setEditorData和setModelData函数。
class SpinBoxDelegate(QItemDelegate):
def __init__(self, parent, uint):
QItemDelegate.__init__(self, parent)
self.suffix = uint
# 创建控件并设置控件的最大和最小输入值及后缀
def createEditor(self, parent, option, index):
spinbox = QSpinBox(parent)
spinbox.setMaximum(999)
spinbox.setMinimum(0)
spinbox.setSuffix(self.suffix)
return spinbox
# 设置控件数值
def setEditorData(self, editor, index):
if(index.model().data(index) == ''):
editor.setValue(0)
else:
text = index.model().data(index).split(' ')[0]
editor.setValue(float(text))
# 设置更改数值后,单元格的数值
def setModelData(self, editor, model, index):
model.setData(index, str(editor.value()) + str(' ') + self.suffix)