QTableWidget 验证编号范围

QTableWidget validation number range

如何在每个单元格中实施输入验证?我希望输入是介于 0 和 100

范围内的整数

一个选项是将 QIntValidator 设置为委托创建的编辑器:

import sys

from PyQt5 import QtCore, QtGui, QtWidgets


class Delegate(QtWidgets.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        editor = super().createEditor(parent, option, index)
        if isinstance(editor, QtWidgets.QLineEdit):
            validator = QtGui.QIntValidator(0, 100, editor)
            editor.setValidator(validator)
        return editor


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    table_widget = QtWidgets.QTableWidget(10, 4)
    table_widget.resize(640, 480)
    table_widget.show()

    delegate = Delegate()
    table_widget.setItemDelegate(delegate)

    app.exec_()

另一种选择是使用 QSpinBox 作为已经有验证器的编辑器。

import sys

from PyQt5 import QtCore, QtGui, QtWidgets


class Delegate(QtWidgets.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        return QtWidgets.QSpinBox(parent, minimum=0, maximum=100)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    table_widget = QtWidgets.QTableWidget(10, 4)
    table_widget.resize(640, 480)
    table_widget.show()

    delegate = Delegate()
    table_widget.setItemDelegate(delegate)

    app.exec_()