如何在QTableWidget列上应用验证器?

3

我在Qt designer中创建了一个表格。在表格的第2列中,我希望用户输入的内容只能是大写字母。如何实现呢?

示例表格

我不太清楚应该使用QTableWidget或QTableWidgetItem中的哪个实用程序来实现此功能。

1个回答

1

您可以使用委托来修改用户输入:

from PyQt5 import QtCore, QtGui, QtWidgets


class UpperDelegate(QtWidgets.QStyledItemDelegate):
    def createEditor(self, parent, index, option):
        editor = super(UpperDelegate, self).createEditor(parent, index, option)
        font = QtGui.QFont(editor.font())
        font.setCapitalization(QtGui.QFont.AllUppercase)
        editor.setFont(font)
        return editor

    """def initStyleOption(self, option, index):
        super(UpperDelegate, self).initStyleOption(option, index)
        font = QtGui.QFont(option.font)
        font.setCapitalization(QtGui.QFont.AllUppercase)
        option.font = font"""

    def setModelData(self, editor, model, index):
        text = editor.property("text")
        if isinstance(text, str): 
            editor.setProperty("text", text.upper())
        super(UpperDelegate, self).setModelData(editor, model, index)
        # model.setData(index, editor.text().upper(), QtCore.Qt.DisplayRole)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = QtWidgets.QTableWidget(10, 4)
    delegate = UpperDelegate(w)
    w.setItemDelegateForColumn(1, delegate)
    w.show()
    sys.exit(app.exec_())

这是一个显示/编辑方面的解决方法,OP询问了关于使用特定规则限制用户输入的问题。 - bugmenot123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接