IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

FocusOut et setFocus


Sujet :

PyQt Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Stagiaire Developpement Info
    Inscrit en
    Juin 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Stagiaire Developpement Info

    Informations forums :
    Inscription : Juin 2019
    Messages : 3
    Points : 4
    Points
    4
    Par défaut FocusOut et setFocus
    Bonjour à vous,

    Je me tourne vers vous aujourd'hui car j'ai un petit soucis au niveau de mes QLineEdit. J'ai mis une vérification de données sur mes champs au moment ou ce dernier perd le focus. La vérification fonctionne bien et cela ce passe bien si le champ est rempli comme il faut.

    Je place mon code de suite ce sera plus simple à expliquer je pense :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    class MyQLineEdit(QtWidgets.QLineEdit):
        def __init__(self,parent=None,bigpapa=None):
            super(MyQLineEdit,self).__init__(parent)
            self.setMaximumSize(self.parent().maximumSize())
            self.setMinimumSize(self.parent().minimumSize())
            self.setObjectName(self.parent().objectName())
            self.bigpapa=bigpapa
        def focusOutEvent(self,event=None):
            self.LineTextChanged(event)
        def LineTextChanged(self,event):
            try:
                #Si le champ n'est pas vide
                if self.text()!="":
                    #Si le texte correspond à un nombre
                    if DataEntryControler().IntegerControlerForEditLine(self.text()) or DataEntryControler().FloatControlerForEditLine(self.text()):
                        self.bigpapa.UpdateIHM()
                        super(MyQLineEdit,self).focusOutEvent(event)
                #Sinon garde le focus
                else:
                    self.setFocus()
            except:
                e=sys.exc_info()
                print(e)
    Le soucis est que si je ne remplis pas le champ comme il se doit voir pas du tout, et que je veuille changer de champ, mon programme plante. Je pense que cela viens du .setFocus(). Comme il redonne le focus au lineEdit dans lequel j’étais cela fais passer le lineEdit dans lequel j'ai cliqué par le FocusOut() lui aussi et cela doit me faire une boucle récursive entre les deux lineEdit...

    Est ce qu'il y a un moyen de faire en sorte que le lineEdit garde le focus sans passer par .setFocus(). Un truc du style rollback ou quelque choses comme ça ?

    Edit: Je suis sous Python 3.6.5 et PyQt5

    Edit 2 : Je viens de pensée à ça (comme quoi sa sert d'écrire son problème sur "papier" ^^), je transforme tout mes QLineEdit en MyQLineEdit au même moment avec un boucle for au moment de l'initialisation de ma fenêtre. Est ce que cela n'éviterait mon problème si je le fais à un autre moment, sur le signal textChanged par exemple ?

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Replacer le focus dans la QLineEdit n'est pas une bonne pratique pour l'utilisateur.

    Lorsque la QLineEdit perd le focus, tu analyses son contenu et s'il ne correspond pas tu le remplaces par un avertissement, éventuellement d'une autre couleur.

    Si c'est un nombre qui est attendu, tu peux la remplacer par une QDoubleSpinBox.

  3. #3
    Candidat au Club
    Homme Profil pro
    Stagiaire Developpement Info
    Inscrit en
    Juin 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Stagiaire Developpement Info

    Informations forums :
    Inscription : Juin 2019
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Ok, j'avais essayé cela car durant ma formation j'avais effectué une méthode ou la saisie était bloqué temps que celle si était incorrect, mais c'était en C#.

    Pour ce qui est du message d'alerte, j'avais prévu de le mettre. Je vais regarder pour les QDoubleSpinBox vu que toutes mes valeurs sauf trois sont des nombres.

    Merci VinsS pour ton aide et ta rapidité de réponse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Partager la fonction setFocus
    Par San Soussy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 28/01/2005, 15h06
  2. [VB6] SetFocus sur une MSHFlexGrid
    Par jlvalentin dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/01/2005, 15h22
  3. [débutant] setfocus sur un TextField
    Par k-reen dans le forum Composants
    Réponses: 2
    Dernier message: 29/06/2004, 16h21
  4. [MFC] CSplitterWnd et SetFocus
    Par venomelektro dans le forum MFC
    Réponses: 6
    Dernier message: 08/04/2004, 18h13
  5. Erreur setfocus??
    Par Alx-I dans le forum Composants VCL
    Réponses: 2
    Dernier message: 06/02/2003, 14h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo