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

Python Discussion :

combobox et choix


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Par défaut combobox et choix
    bonjour,
    j'ai un petit script qui contrôle le choix dans combobox cad il ne quitte le combo que si le choix est différent du "-----CHOIX-----" index 0 sinon un message d'erreur s’affiche
    le problème que j'ai c'est que quand j'appuis sur la flèche du combo j'ai le message or je souhaite que le message ne s’affiche que si je quitter le combo sans faire un choix




    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    from tkinter import *
    from tkinter.messagebox import *
    from tkinter import ttk
     
     
    fenetre_Creation_Proprietaire = Tk()
    fenetre_Creation_Proprietaire.title('CREATION PROPRIETAIRE')
    fenetre_Creation_Proprietaire.geometry("1150x450")
     
     
    def Quitter_Focus(StringT):
        Valeur=StringT.get()
        Longueur=len(Valeur)
        if 'CHOIX' in Valeur :
                showerror('Erreur: Saisie De Champ ', "Choix Du Mois Obligatoire")
                ChoixMois.focus_set()
     
     
     
    Label(fenetre_Creation_Proprietaire, bg='red',text="Mois") .place(x=110,y=20, height=25, width=50)
     
    ListeChoix=['-----CHOIX-----','JANVIER', 'FEVRIER','MARS','AVRIL']
    Choix_Mois = StringVar()
    ChoixMois = ttk.Combobox(fenetre_Creation_Proprietaire, state = 'readonly',values=ListeChoix,name="choixmois",textvariable = Choix_Mois)
    ChoixMois.place(x=165,y=20,height=25, width=115)
    ChoixMois.current(0)
    ChoixMois.focus_set()
    ChoixMois.bind('<FocusOut>', lambda e, : Quitter_Focus(Choix_Mois))
     
     
    LabNomPre=Label(fenetre_Creation_Proprietaire, bg='red',text="Nom & Prénom")
    LabNomPre.place(x=490,y=20, height=25, width=100)
    Nom_Pre=StringVar()
    NomPre=Entry(fenetre_Creation_Proprietaire, font=("Purisa", 13), bg="yellow",  justify="left",textvariable=Nom_Pre)
    NomPre.place(x=595,y=20, height=25, width=300)
    NomPre.bind('<Return>', lambda event: NumCin.focus_set())
    Nom_Pre.trace("w", lambda *a:Nom_Pre.set(Nom_Pre.get().upper()))
     
     
     
    fenetre_Creation_Proprietaire.mainloop()
    merci pour toute aide

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 683
    Par défaut
    Salut,

    La ttk.Combobox hérite de ttk.Entry et est associé à une Listbox.
    De fait, un .bind ne va porter que sur l'Entry et non sur le composite.

    C'est un dialogue avec l'utilisateur, pour le forcer à renseigner le "mois", il va falloir faire autrement...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Par défaut
    est-ce qu'il y a un autre moyen pour tester si le mois est renseigné dès que le focus quitte le mois
    je sais que tester le mois après avoir renseigné tous les champs n'est pas pratique

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 683
    Par défaut
    Salut,

    Si le problème est d'attendre que la Combobox ait été renseignée avant de passer à autre chose, vous avez constaté qu'avec "focusout", çà ne fonctionnait pas.

    Si vous restez scotché à vouloir utiliser une Combobox, il va falloir imaginer d'autres conditions et arriver à le faire fonctionner.

    Par exemple, vous pourriez explorer comment exploiter un traitement de focusin sur la fenêtre principale. Si çà part ailleurs que dans la Combobox, on laisse faire si une valeur correcte a été saisie, sinon...

    note: c'est bien d'imaginer des interactions utilisateurs originales, mais après, il faut le coder (avec les outils, les connaissances et le temps qu'on a).


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,


    Si vous restez scotché à vouloir utiliser une Combobox, il va falloir imaginer d'autres conditions et arriver à le faire fonctionner.

    - W
    ce n'est pas question d’être scotché ou pas mais je suis entrain de transformer un script écrit en VBA vers python donc le script VBA utilise un ComboBox
    bref sinon
    j'ai même essayer de ne pas faire le bind avec focusout sur ComboBox et de le faire sur Entry avec FocusIn ça ne marche pas non plus car il m'affiche deux fois le message d’erreur quand je passe à l'Entry nom sans faire le choix
    voici le code

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    from tkinter import *
    from tkinter.messagebox import *
    import tkinter.ttk as ttk
    fenetre_Creation_Proprietaire =Tk()
    fenetre_Creation_Proprietaire.title('CREATION PROPRIETAIRE')
    fenetre_Creation_Proprietaire.geometry("1150x450")
     
     
    def Quitter_Focus(Valeur):
     
        if ChoixMois.current() ==0 :
     
                showerror('Erreur: Saisie De Champ ', "Choix De Civilité Obligatoire")
     
                ChoixMois.focus_set()
     
     
    Label(fenetre_Creation_Proprietaire, bg='red',text="Mois") .place(x=110,y=20, height=25, width=50)
     
    ListeChoix=['-----CHOIX-----','JANVIER', 'FEVRIER','MARS','AVRIL']
    Choix_Mois = StringVar()
    ChoixMois = ttk.Combobox(fenetre_Creation_Proprietaire,state = 'readonly',values=ListeChoix,name="choix assujetti", textvariable =Choix_Mois)
    ChoixMois.place(x=165,y=20,height=25, width=115)
    ChoixMois.current(0)
    ChoixMois.focus_set()
    #ChoixMois.bind('<FocusOut>', lambda e, : Quitter_Focus(ChoixMois.get()))
     
    LabNomPre=Label(fenetre_Creation_Proprietaire, bg='red',text="Nom & Prénom")
    LabNomPre.place(x=490,y=20, height=25, width=100)
    Nom_Pre=StringVar()
    NomPre=Entry(fenetre_Creation_Proprietaire, font=("Purisa", 13), bg="yellow",  justify="left",textvariable=Nom_Pre)
    NomPre.place(x=595,y=20, height=25, width=300)
    Nom_Pre.trace("w", lambda *a:Nom_Pre.set(Nom_Pre.get().upper()))
    NomPre.bind('<FocusIn>', lambda e, : Quitter_Focus(ChoixMois.get()))
     
     
    fenetre_Creation_Proprietaire.mainloop()
    merci encore

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 683
    Par défaut
    Salut,

    Citation Envoyé par THCH66 Voir le message
    ça ne marche pas non plus car il m'affiche deux fois le message d’erreur quand je passe à l'Entry nom sans faire le choix
    Si çà balance 2 events "focusin", le second arrive lorsque la boîte de dialogue attend la réponse. Mettez un "verrou" pour l'ignorer tant que la boite de dialogue est active.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Si çà balance 2 events "focusin", le second arrive lorsque la boîte de dialogue attend la réponse. Mettez un "verrou" pour l'ignorer tant que la boite de dialogue est active.

    - W
    merci pour ton aide mais je ne trouve pas comment faire

  8. #8
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Par défaut
    Citation Envoyé par THCH66 Voir le message
    merci pour ton aide mais je ne trouve pas comment faire
    voila ce que j'ai fais j'ai mis un compteur pour tester le nombre de message afficher ça marche mais j'ai l'impression que c'est du bricolage
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    from tkinter import *
    from tkinter.messagebox import *
    import tkinter.ttk as ttk
     
     
    fenetre_Creation_Proprietaire =Tk()
    fenetre_Creation_Proprietaire.title('CREATION PROPRIETAIRE')
    fenetre_Creation_Proprietaire.geometry("1150x450")
     
    global NbrMess
    NbrMess=0
     
     
    def Quitter_Focus(Valeur):
     
     
        global NbrMess
     
     
        if ChoixMois.current() ==0 and NbrMess==0:
     
                NbrMess=NbrMess+1
                showerror('Erreur: Saisie De Champ ', "Choix De Civilité Obligatoire")
                NbrMess=0
     
                ChoixMois.focus_set()
     
     
     
     
     
     
    Label(fenetre_Creation_Proprietaire, bg='red',text="Mois") .place(x=110,y=20, height=25, width=50)
     
    ListeChoix=['-----CHOIX-----','JANVIER', 'FEVRIER','MARS','AVRIL']
    Choix_Mois = StringVar()
    ChoixMois = ttk.Combobox(fenetre_Creation_Proprietaire,state = 'readonly',values=ListeChoix,name="choix assujetti", textvariable =Choix_Mois)
    ChoixMois.place(x=165,y=20,height=25, width=115)
    ChoixMois.current(0)
    ChoixMois.focus_set()
     
    LabNomPre=Label(fenetre_Creation_Proprietaire, bg='red',text="Nom & Prénom")
    LabNomPre.place(x=490,y=20, height=25, width=100)
    Nom_Pre=StringVar()
    NomPre=Entry(fenetre_Creation_Proprietaire, font=("Purisa", 13), bg="yellow",  justify="left",textvariable=Nom_Pre)
    NomPre.place(x=595,y=20, height=25, width=300)
     
    Nom_Pre.trace("w", lambda *a:Nom_Pre.set(Nom_Pre.get().upper()))
     
    NomPre.bind('<FocusIn>', lambda e, : Quitter_Focus(ChoixMois.get()))
     
     
    fenetre_Creation_Proprietaire.mainloop()
    merci pour votre avis

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 683
    Par défaut
    Salut,

    Citation Envoyé par THCH66 Voir le message
    voila ce que j'ai fais j'ai mis un compteur pour tester le nombre de message afficher ça marche mais j'ai l'impression que c'est du bricolage
    Il n'y a pas besoin de "compter" puisque çà signale un "showerror" en cours, un booléen True/False suffirait.
    Pour moi, c'est juste de la programmation: on regarde comment çà fonctionne, puis on gère les problèmes... Et, comme c'est pas tkinter qui gère l'ensemble mais le windows manager de l'OS.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2020
    Messages : 67
    Par défaut
    Bonjour,
    bon ça marche mais il me reste un souci avant de valider que c'est résolu c'est que j'ai deux fenêtres: fenêtre 1 principale et fenêtre 2 secondaire quand j’affiche les deux fenêtre je souhaite que la fenêtre 2 s’affiche devant la principale et que le message boxe il s’affiche sur la fenêtre secondaire et non pas fenêtre principale

    comment faire est ce qu'il y a un moyen pour obliger le message box de s'afficher sur une fenêtre déterminé qui n'est pas forcement la fenêtre principale
    pourtant j'ai mis
    fenetre_Creation_Proprietaire.grab_set() #pour mettre la fenetre secondaire devant la fenetre principal cad en avant plans
    fenetre_Creation_Proprietaire.focus_set() #pour lui donner le focus

    merci

    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
    from tkinter import *
    from tkinter.messagebox import *
    fenetre = Tk()
    fenetre.title("F Principale")
    fenetre.geometry("850x850")
     
    fenetre_Creation_Proprietaire=Toplevel(fenetre)
    fenetre_Creation_Proprietaire.title('CREATION PROPRIETAIRE')
    fenetre_Creation_Proprietaire.geometry("1150x450")
    fenetre_Creation_Proprietaire.grab_set() #pour mettre la fenetre secondaire devant la fenetre principal cad en avant plans
    fenetre_Creation_Proprietaire.focus_set() #pour lui donner le fo
     
    def QUITTER():
     showerror('Erreur: Saisie De Champ ', "Choix De Civilité Obligatoire")
     
     
    QUITTER = Button(fenetre_Creation_Proprietaire, text = "QUITTER",bg="green", command = QUITTER)
    QUITTER.place(x=500,y=380,height=25, width=100)
     
    fenetre_Creation_Proprietaire.mainloop()
     
     
    fenetre.mainloop()

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 683
    Par défaut
    Salut,

    Citation Envoyé par THCH66 Voir le message
    mais il me reste un souci avant de valider que c'est résolu c'est que j'ai deux fenêtres: fenêtre 1 principale et fenêtre 2 secondaire quand j’affiche les deux fenêtre je souhaite que la fenêtre 2 s’affiche devant la principale [COLOR="#FF0000"]et que le message boxe il s’affiche sur la fenêtre secondaire et non pas fenêtre principale
    Un forum de discussion n'est pas une hotline: appuyer ou pas sur le bouton résolu, pas grand monde s'en soucie.
    Pour le reste, ouvrez une documentation sur les fenêtres de message et regardez les différents paramètres qu'on peut leur passer est une piste.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Combobox event choix
    Par Invité dans le forum C#
    Réponses: 2
    Dernier message: 25/02/2012, 09h45
  2. combobox et choix image
    Par timtof2011 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/09/2011, 23h37
  3. combobox a choix multiple
    Par elgaied dans le forum Outils
    Réponses: 3
    Dernier message: 23/01/2010, 19h06
  4. ComboBox multi choix
    Par beet2che dans le forum VB.NET
    Réponses: 1
    Dernier message: 19/09/2008, 14h23
  5. [VB.NET] ComboBox de choix de couleurs
    Par Yorglaa dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/09/2005, 13h17

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