如何在QTableWidget中验证单元格?

3

我使用python3.4中的pyqt4。当输入单元格时,我希望能够验证单元格中的文本是否为浮点数。如何实现?


添加验证器可以强制用户输入数字:http://pyqt.sourceforge.net/Docs/PyQt4/qdoublevalidator.html 如果输入不是数字,则无法将其输入到单元格中。 - SNygard
1个回答

5

你有两种选择。

第一种,你可以创建一个 QItemDelegate 并重写 createEditorsetEditorDatasetModelData 方法来控制用于编辑数据的小部件。如果你只需要输入数字,你可以创建一个带有验证器的 QLineEdit,但是最好还是使用只允许整数和浮点数的 QSpinBoxQDoubleSpinBox。此外,你也可以让用户输入任何值,然后在 setModelData 函数中忽略任何无效的值。

class MyDelegate(QtGui.QItemDelegate):

    def createEditor(self, parent, option, index):
        return QtGui.QSpinBox(parent)


delegate = MyDelegate()
table.setItemDelegate(delegate)

如果你的表格中的项目已经有编号,那么更简单的解决方案就是为该项目分配一个整数或浮点数的EditData角色。 Qt将会注意到类类型并自动为你构造一个QSpinBoxQDoubleSpinBox

item = QTableWidgetItem()
item.setData(QtCore.Qt.EditRole, 5)

我尝试使用 QItemDelegate,它起作用了 但是 我需要一个浮点数,而它只允许我使用整数。 - Reinier Hernández
如果您想使用浮点数,请使用 QDoubleSpinBox - Brendan Abel
非常感谢。你能告诉我在哪里可以找到关于QItemDelegate的文档吗?我不喜欢写你不理解的代码。 - Reinier Hernández
1
只需在谷歌上搜索“pyqt qitemdelegate”--http://pyqt.sourceforge.net/Docs/PyQt4/qitemdelegate.html - Brendan Abel
对于非委托路径:如果我们将EditRole设置为int,那么我们应该如何设置项目的显示文本?使用item.setText(str(value))会使项目在编辑时接受任何内容,并且不显示任何特殊小部件。 - bugmenot123

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