如何验证 QTableWidget 中的单元格?

Posted

技术标签:

【中文标题】如何验证 QTableWidget 中的单元格?【英文标题】:How validate a cell in QTableWidget? 【发布时间】:2016-06-03 19:06:29 【问题描述】:

我在pyqt4 中工作python3.4 我想验证单元格中的文本在引入时是否为浮点数。我该怎么做?

【问题讨论】:

添加验证器可以强制用户输入数字:pyqt.sourceforge.net/Docs/PyQt4/qdoublevalidator.html 如果输入不是数字,则不会接受单元格的输入。 【参考方案1】:

你有两个选择。

您可以创建一个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 并且可以工作但是我需要一个浮点数并且只能让我使用整数 如果你想使用浮点数,请使用QDoubleSpinBox 非常感谢。你能告诉我在哪里可以找到关于 QItemDelegate 的文档吗?就是我不喜欢写你不懂的代码 只要谷歌“pyqt qiitemdelegate”——pyqt.sourceforge.net/Docs/PyQt4/qitemdelegate.html 对于非委托路径:如果我们将 EditRole 设置为 int,那么我们应该如何将项目的文本设置为显示?使用item.setText(str(value)) 使项目在编辑时接受任何内容,并且不显示任何特殊小部件。

以上是关于如何验证 QTableWidget 中的单元格?的主要内容,如果未能解决你的问题,请参考以下文章

在 QTableWidget 的中心对齐单元格小部件?

表格未聚焦时如何设置QTableWidget单元格背景颜色?

如何将文本与 QTableWidget 中的单元格中心对齐

如何将文本与 QTableWidget 中的单元格中心对齐

如何将文本与QTableWidget中的单元格中心对齐

如何告诉 QTableWidget 结束编辑单元格?