【问题标题】:PyQt5 QDoubleValidator don't allow to write dot separators : x.yPyQt5 QDoubleValidator 不允许写点分隔符:x.y
【发布时间】:2021-09-30 08:30:01
【问题描述】:

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

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

我尝试使用 QDoubleValidator 实现 QItemDelagate,以便仅在 cols 中写入具体数字。

这是我的功能:

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”。

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

我该如何处理?

【问题讨论】:

    标签: python pandas dataframe pyqt5 qitemdelegate


    【解决方案1】:

    这很可能是由于您的验证器的语言环境。验证器使用他们的语言环境来确定应该如何解释数字。如果您没有明确设置验证器的区域设置,则使用您系统的区域设置。如果碰巧将其设置为使用逗号作为小数点的语言环境,您的验证器也会这样做。为了解决这个问题,您可以将验证器的语言环境设置为使用点作为小数点的语言环境,例如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
    

    【讨论】:

    • 感谢@Heike,我已经看到了这些Qlocale 参数,昨天我尝试实现它。没有成功。效果很好我是 PyQt5 的新手,我会挖掘这个,因为他太强大了!
    猜你喜欢
    • 1970-01-01
    • 2013-11-03
    • 2020-01-16
    • 1970-01-01
    • 2019-04-23
    • 2021-05-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    相关资源
    最近更新 更多