QTableView中的PyQt5 DoubleSpinBox

时间:2018-11-06 20:18:53

标签: python python-3.x pyqt pyqt5

使用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))

我遇到的问题是,编辑器作为单独的对话框显示在屏幕的左上角。我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

请勿将QWidgetQStyleOptionViewItemQModelIndex用作函数参数的名称,因为它们是类的名称,并且您会混淆它们。另一方面,您必须作为编辑者的父级传递给createEditor()的第一个参数:

def createEditor(self, parent, option, index):
    editor = QDoubleSpinBox(parent)
    editor.setMinimum(.01)
    editor.setMaximum(999999.99)
    return editor