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

Tkinter Python Discussion :

Besoin d'aide pour comprendre pourquoi ce code ne fonctionne pas


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2017
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Besoin d'aide pour comprendre pourquoi ce code ne fonctionne pas
    [Niveau : Débutant]
    [Python 3.5]

    Bonjour,

    j'essaie de m'approprier les bases de Python en me documentant ici et là, mais en réalisant un exercice, j'ai été confronté à un problème qui soulève un problème de compréhension de ma part sur mon propre code. Voici mon programme qui fonctionne :

    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
     
     
    import tkinter as tk
    import random as rand
     
    def affiche_calcul(a,b):
        return str(a)+"x"+str(b)+"="
     
    def verification():
        if eval(zone_de_saisie.get()) == resultat:
            tk.Label(ma_fenetre, text ="Bien!").place(x = 20, y = 120)
        else:
            tk.Label(ma_fenetre, text ="Faux, la réponse est : "+str(resultat)).place(x = 20, y = 120)
     
     
    a = rand.randint(1,10)
    b = rand.randint(1,10)
    resultat = a*b
     
    ma_fenetre = tk.Tk()
    ma_fenetre.title("Je vérifie que je connais mes tables")
    ma_fenetre.geometry("400x600")
     
    mon_bouton = tk.Button(ma_fenetre, text = "Vérifier", width = 20, command=verification)
    affiche_calcul = tk.Label(ma_fenetre, text = affiche_calcul(a,b))
    zone_de_saisie = tk.Entry(ma_fenetre)
     
    affiche_calcul.place(x = 20, y = 60)
    zone_de_saisie.place(x = 20, y = 80)
    mon_bouton.place(x = 20, y = 100)
     
    ma_fenetre.mainloop()
    Avant d'en arriver là, j'avais tenté ce 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
     
     
    import tkinter as tk
    import random as rand
     
    def affiche_calcul(a,b):
        return str(a)+"x"+str(b)+"="
     
     
    a = rand.randint(1,10)
    b = rand.randint(1,10)
    resultat = a*b
     
    ma_fenetre = tk.Tk()
    ma_fenetre.title("Je vérifie que je connais mes tables")
    ma_fenetre.geometry("400x600")
     
     
    affiche_calcul = tk.Label(ma_fenetre, text = affiche_calcul(a,b))
    if eval(tk.Entry(ma_fenetre).get()) == resultat:
        tk.Label(ma_fenetre, text ="Bien!").place(x = 20, y = 120)
    else:
        tk.Label(ma_fenetre, text ="Faux, la réponse est : "+str(resultat)).place(x = 20, y = 120)
     
     
    affiche_calcul.place(x = 20, y = 60)
    zone_de_saisie.place(x = 20, y = 80)
     
     
     
     
    ma_fenetre.mainloop()
    La différence c'est que sur la première version, j'ai créé un bouton et une fonction qui est appelée lorsque je clique sur le bouton. Dans la deuxième, j'ai voulu faire sans l'utilisation d'un bouton. Donc j'ai voulu intégrer le corps de la fonction dans le programme principal. Seulement, la valeur mise dans la zone de saisie ne semble jamais être lue par le programme, malgré l'utilisation de la fonction .get().

    J'imagine que le problème est événementiel, c'est ce que j'ai cru comprendre en lisant le FAQ, mais je ne parviens pas à l'identifier. Je ne comprends pas ce qu'il se passe (ou ne se passe pas).

    Pourriez-vous m'expliquer, si vous voyez le problème?

    Merci,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    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 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Salut,

    Citation Envoyé par majestyofgaia Voir le message
    J'imagine que le problème est événementiel, c'est ce que j'ai cru comprendre en lisant le FAQ, mais je ne parviens pas à l'identifier. Je ne comprends pas ce qu'il se passe (ou ne se passe pas).

    Pourriez-vous m'expliquer, si vous voyez le problème?
    Dans un cas le .get s'exécute avant la saisie utilisateur, dans l'autre, le .get attend que l'utilisateur appuie sur le bouton qui signale qu'il a saisi quelque chose. Ce chapitre du Swinnen a été écrit pour vous.

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2017
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre réponse. J'avais déjà pensé à cette éventualité, puis je m'étais dit que comme à la fin il y a ma_fenetre.mainloop(), la saisie du texte serait détectée à un moment ou à un autre. Du coup, je pense que c'est ma compréhension de la fonction mainloop() qui n'est pas bonne. Pour moi, elle répétait le "main" indéfiniment (un peu comme lorsque nous avions fait des programmes pour l'Arduino, en langage C il me semble) mais je crois que c'est là que j'ai tort.

    Du coup, si je veux garder le programme sans bouton, il faudrait par exemple que je cherche la détection de la touche entrée du clavier (qui validerait la saisie) afin que le main se rééxécute et lance de nouveau le get()?

    Sinon j'ai lu ce chapitre, c'est même une recherche google qui m'a mené sur ce chapitre qui m'a fait découvrir votre site. Mais visiblement, je n'ai pas tout compris... pas grave, je vais persévérer! Merci encore.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    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 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par majestyofgaia Voir le message
    Du coup, si je veux garder le programme sans bouton, il faudrait par exemple que je cherche la détection de la touche entrée du clavier (qui validerait la saisie) afin que le main se rééxécute et lance de nouveau le get()?
    Oui çà peut se faire...
    C'est plus compliqué à réaliser mais le principe est toujours le même: construire une interface (les widgets qui s'affichent avec lesquels l'utilisateur pourra interagir), associer des évènements à des actions (matérialisées par des fonctions appelées "callback" dans ce contexte)...
    Et la mainloop déclenchera les actions associées aux évènements.

    Citation Envoyé par majestyofgaia Voir le message
    Sinon j'ai lu ce chapitre, c'est même une recherche google qui m'a mené sur ce chapitre qui m'a fait découvrir votre site. Mais visiblement, je n'ai pas tout compris... pas grave, je vais persévérer! Merci encore.
    Lire le chapitre est un bon début, il sème quelques idées qui sont utiles pour penser une interface graphique mais difficile de comprendre les conséquences (les implications sur le code à écrire pour que çà fonctionne).
    La pratique qui obligera à poser de bonnes questions. Et c'est avec cet éclairage que la relecture de quelques uns des paragraphes de ce chapitre seront plus compréhensibles.
    De toutes façons comprendre, c'est au bout du bout fabriquer des connexions entre différents neurones de son cerveau... Il faut l'entraîner et être patient si on espère vouloir arriver à quelque chose.

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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2017
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour le lien et ce complément d'informations.

Discussions similaires

  1. Besoin d'aide pour comprendre un code
    Par belibaste34 dans le forum MATLAB
    Réponses: 0
    Dernier message: 25/04/2014, 10h01
  2. [AC-2007] besoin d'aide pour comprendre un code pour FTP trouvé sur le forum
    Par tibofo dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/04/2010, 20h03
  3. Besoin d'aide pour comprendre ce bout de code
    Par sorry60 dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 21/03/2009, 16h44
  4. [MySQL] besoin d'aide pour comprendre les injections sql
    Par cassy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/01/2007, 14h21
  5. Besoin d aide pour comprendre un code
    Par litlebasic dans le forum Delphi
    Réponses: 4
    Dernier message: 22/06/2006, 13h00

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