4 votes

Je utilise QDoubleValidator dans mon programme pyqt5 mais il ne semble pas fonctionner

Je crée un objet QWidget dans lequel il y a quelques lineEdits et j'ai l'intention d'ajouter des contraintes à ceux-ci, donc j'implémente des objets QDoubleValidator. Voici la partie concernée de mon code.

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

Mais lorsque je lance le programme, je découvre que je peux toujours saisir des nombres comme 123165.15641. Il semble que le validateur ne fasse aucune différence.

Je me demande si j'ai manqué une étape ou si le validateur déclenchera un signal.

Le lineEdit

4voto

eyllanesc Points 79506

Par défaut, QDoubleValidator utilise la notation ScientificNotation, et dans cette notation 123165.15641 est une valeur valide possible car elle peut être convertie en 123165.15641E-100 et c'est un nombre compris entre 0 et 100. Dans ce cas, la solution est d'établir qu'il est utilisé la notation standard :

de 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, # bas
                100.0, # haut
                6, # décimales
                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_())

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X