Я использую QDoubleValidator в моей программе pyqt5, но она не работает - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю объект QWidget, в котором есть некоторые lineEdits, и я собираюсь добавить к ним некоторые ограничения, поэтому я реализую объекты QDoubleValidator.Ниже приведена соответствующая часть в моем коде.

self.lineEdit_taxRate= QLineEdit()
self.lineEdit_taxRate.setValidator(QDoubleValidator(0.0, 100.0, 6))

Но когда я запускаю программу, я обнаруживаю, что все еще могу ввести число, например 123165.15641.Кажется, валидатор не имеет значения.

Интересно, пропустил ли какой-то шаг, или валидатор вызовет какой-нибудь сигнал.

LineEdit

1 Ответ

0 голосов
/ 18 февраля 2019

По умолчанию QDoubleValidator использует нотацию ScientificNotation , и в ней нотация 123165.15641 является возможным допустимым значением, поскольку его можно преобразовать в 123165.15641E-100, и это число находится в диапазоне от 0 до 100. ВВ этом случае решение состоит в том, чтобы установить, что используется стандартное обозначение:

from PyQt5 import QtGui, QtWidgets

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.lineEdit_taxRate= QtWidgets.QLineEdit()
        self.lineEdit_taxRate.setValidator(
            QtGui.QDoubleValidator(
                0.0, # bottom
                100.0, # top
                6, # decimals 
                notation=QtGui.QDoubleValidator.StandardNotation
            )
        )
        self.setCentralWidget(self.lineEdit_taxRate)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
...