PyQt5 QDoubleValidator 不允许写点分隔符:x.y

问题描述

大家好, 我正在尝试开发一个 GUI 来使用 PyQt5 模块修改和计算 Pandas DataFrames。

我实际上可以显示我的 DataFrame,并编辑或不编辑特定列。它显示QTableWidget 中。

我尝试使用 QDoubleValidator 实现一个 QItemDelagate 以仅在列中写入特定数字。

这是我的功能

class FloatDelegate(QItemDelegate):
    def __init__(self,parent=None):
        super().__init__()

    def createEditor(self,parent,option,index):
        editor = QLineEdit(parent)
        editor.setValidator(QDoubleValidator(0.0000,1.0000,4))
        return editor

.....

 #data check float
 dataCheckDelege = FloatDelegate(self)
 self.setItemDelegateForColumn(3,dataCheckDelege)

我只能写 0 和 1 之间的数字,这很好,我可以用“,”分隔符写浮标,比如“0,5”。

但是我不能使用 " . " SEParaTOR,我不能写“0.5”,这就是我需要写我的数据的方式。

我该如何处理?

解决方法

这很可能是由于您的验证器的语言环境。验证器使用其语言环境来确定应如何解释数字。如果您没有明确设置验证器的语言环境,则使用您系统的语言环境。如果碰巧设置为使用逗号作为小数点的语言环境,您的验证器也会这样做。为了解决这个问题,您可以将验证器的语言环境设置为使用点作为小数点的语言环境,例如QLocale("en_US")

def createEditor(self,parent,option,index):
    editor = QLineEdit(parent)
    validator = QDoubleValidator(0.0,1.0,4)
    validator.setLocale(QtCore.QLocale("en_US")
    editor.setValidator(validator)
    return editor