如何在PyQt4中使用QInputMask和QDoubleValidator?

时间:2012-11-05 05:27:39

标签: python pyqt4 qlineedit maskedinput

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

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

我将lineEdit设置为默认值self.ui.lineEdit_X_Position.setText(格式('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 个答案:

答案 0 :(得分:1)

QInpuMask中没有错误。

您设置的蒙版允许以多种不同的方式输入某些值 - 所有这些值同样有效。例如,值" 543.2"用户可以输入5_,_4_3._2__,543.2__5,4__3._2等。

当以编程方式输入这样的值时,Qt无法猜测各种可能性中的哪一个是"首选"一,只是填补他们通常打字方向的空白。因此,您看到的输出是正确的,并且完全符合预期。

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

QDoubleSpinBox似乎更合适:

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