QTableWidget 中的 InputMask

InputMask in QTableWidget

在第三列到第八列输入QTableWidget时,我只想允许整数和小数点后三位的小数。 尝试过各种事情:

self.vg.tablewidget.setValidator(QRegExpValidator(QRegExp("[0-9]*[.]{,1}[0-9]{,3}"))) or
self.vg.tableWidget.setItemDelegateForColumn(2, QRegularExpressionValidator(("[0-9]*[.]{,1}[0-9]{,3}"))).

很遗憾没有成功。

您必须创建一个 class 继承自 QStyledItemDelegate 或 QItemDelegate 并覆盖您在编辑器中设置 QValidator 的 createEditor 方法。

class StyledItemDelegate(QtWidgets.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        editor = super().createEditor(parent, option, index)
        if isinstance(editor, QtWidgets.QLineEdit):
            validator = QtGui.QRegExpValidator(
                QtCore.QRegExp(r"[0-9]*[.]{,1}[0-9]{,3}"), editor
            )
            editor.setValidator(validator)
        return editor
for i in range(3, 9):
    delegate = StyledItemDelegate(self.vg.tableWidget)
    self.vg.tableWidget.setItemDelegateForColumn(i, delegate)