使用PyQt5将编辑器委托设置为QDoubleSpinBox:
class MoneyDelegate(QStyledItemDelegate):
def initStyleOption(self, option, index):
super(MoneyDelegate, self).initStyleOption(option, index)
val = float(index.data())
option.text = '${:,.2f}'.format(val)
option.displayAlignment = Qt.AlignVCenter | Qt.AlignRight
def createEditor(self, QWidget, QStyleOptionViewItem, QModelIndex):
super(MoneyDelegate, self).createEditor(QWidget, QStyleOptionViewItem, QModelIndex)
editor = QDoubleSpinBox(self)
editor.setMinimum(.01)
editor.setMaximum(999999.99)
return(editor)
在我的QTableWidget类中:
self.tbl_View.setItemDelegateForColumn(2, MoneyDelegate(self))
我遇到的问题是,编辑器作为单独的对话框显示在屏幕的左上角。我在这里想念什么?
答案 0 :(得分:1)
请勿将QWidget
,QStyleOptionViewItem
和QModelIndex
用作函数参数的名称,因为它们是类的名称,并且您会混淆它们。另一方面,您必须作为编辑者的父级传递给createEditor()
的第一个参数:
def createEditor(self, parent, option, index):
editor = QDoubleSpinBox(parent)
editor.setMinimum(.01)
editor.setMaximum(999999.99)
return editor