首页 文章

如何在PyQt4中使用QInputMask和QDoubleValidator?

提问于
浏览
1

我在PyQt4中创建了一个QLineEdit lineEdit_X_Position输入 .

我用self.ui.lineEdit_X_Position.setInputMask(“00,000.00; _”)创建了一个输入掩码 .

我将lineEdit设置为默认值self.ui.lineEdit_X_Position.setText(format('6543.21',“, . 2f”)) .

当我查看UI时,它将X_Position显示为“6_,543.21”而不是“6,543.21” . 我尝试使用self.ui.lineEdit_X_Position.setText(格式('6543.21',“9.2f”))设置默认值,但结果=“65,43.21” .

当默认值为“543.21”时,它会变得更糟 . 我得到的结果为“54,3 __ . 21” .

这是QInputMask中的错误吗?如何使用我想要的QInputMask格式获得正确的结果,用户只能输入数字?

另外,如果我想验证双重结果,如何使用QDoubleValidator?有效范围是0.00到10,000.00 .

1 回答

  • 1

    QInpuMask 中没有错误 .

    您设置的掩码允许以多种不同方式输入某些值 - 所有这些值都同样有效 . 例如,值"543.2"可以由用户输入为 5_,_4_3._2__,543.2_ ,或 _5,4__3._2 等 .

    当以编程方式输入这样的值时,Qt无法猜测各种可能性中的哪一个是“优选的”,并且只是按照通常键入的方向填充空白 . 因此,您看到的输出是正确的,并且完全符合预期 .

    但是考虑到你试图将值限制在某个范围内的数字而不是固定模式中的字符,输入掩码真的是正确的选择吗?

    QDoubleSpinBox似乎更适合:

    self.spinXPosition = QtGui.QDoubleSpinBox(self)
    self.spinXPosition.setRange(0, 10000)
    self.spinXPosition.setDecimals(2)
    

相关问题