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 :

Interface graphique pour un pendu.


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Terminale S spé ISN
    Inscrit en
    Novembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Terminale S spé ISN

    Informations forums :
    Inscription : Novembre 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Interface graphique pour un pendu.
    Bonjour, je suis en terminale S spé ISN et je dois adapter mon pendu avec Tkinter pour l'interface graphique mais je n'arrive pas à ce que la lettre qui est entré dans le "Entry" sois affecté à la variable "lettre". Pourriez vous m'aidez ou m'expliquer comment fonctionne le widget "Entry" et le "get()" ? Merci par avance !
    Si vous avez des conseils ou quoi que ce sois d'autre je suis preneur également !

    Mon code avec Tkinter :
    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
    from tkinter import *
    #import tkMessageBox
     
    liste_lettre=['a','z','e','r','t','y','u','i','o','p','q','s','d','f','g','h','j','k','l','m','w','x','c','v','b','n','A','Z','E','R','T','Y','U','I','O','P','Q','S','D','F','G','H','J','K','L','M','W','X','C','V','B','N']
     
    def recuperer():
        Lettre = lettre.get()
     
    def choix_lettre():
        if lettre in liste_lettre:
            lettres_utilisees.append(lettre)
            entry_1.destroy
            entry_1=Entry(fenetre, textvariable=lettre)
            entry_1.pack()
     
    lettres_utilisees=[]
    toutes_positions=[]
     
    fenetre = Tk()
    fenetre.title('Pendu v1.0')
    bouton_quit=Button(fenetre, text='Quitter', command=fenetre.destroy)
    bouton_quit.pack(side=BOTTOM)
     
    lettre=StringVar()
     
    entry_1=Entry(fenetre, textvariable=lettre)
    entry_1.pack()
    bouton_l=Button(fenetre, text='Valider', command=recuperer)
    bouton_l.pack()
     
    choix_lettre()
     
    canvas=Canvas(fenetre, width=150, height=120, bg='grey')
    canvas.pack()    
     
    fenetre.mainloop()
    Mon pendu sous forme texte :
    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
    55
    56
    57
    58
    59
    60
    61
    62
    #Pendu V(0.1)
     
    import random
    from tkinter import *
     
    def choix_lettre():
        lettre=input("Choisissez une lettre : ")
        lettre=lettre.lower()
        if len(lettre) !=1:
            print ("Ne choisissez qu'une seule lettre !")
            lettre=input("Veuillez entrer une lettre : ")
     
        if lettre in lettres_utilisees:
            print ("Vous avez déjà saisis cette lettre !")
            lettre=input("Veuillez en choisir une autre : ")
     
        return lettre
     
    def lettre_du_mot(lettre,mot):
        position=[]
        compteur= 0
        for lettre_mot in mot:
            if lettre_mot==lettre:
                position.append(compteur)
            compteur=compteur+1
        return position
     
    def mot_afficher(position,mot):
        mot_affiche=''
        compteur=0
        for lettre_mot in mot:
            if compteur in position:
                mot_affiche=mot_affiche+lettre_mot
            else:
                mot_affiche=mot_affiche+'-'
            compteur=compteur+1
     
        return mot_affiche
     
    liste_de_mot=["kebab","mort","jeux","mot","amour","joue","cou","vide","vif","grenier","orage","tromper","guitar","chinois","noir","blanc","vert","billet","drogue","cigarette","gauloise","tigre","chat","chien"]
    mot=random.choice(liste_de_mot)
    chance = 8
    lettres_utilisees=[]
    toutes_positions=[]
     
    while chance>0:
        print ("Il vous reste",chance,"chances.")
        lettre=choix_lettre()
        lettres_utilisees.append(lettre)
        print ("Vous avez déjà utlisés les lettres :",lettres_utilisees,)
        position=lettre_du_mot(lettre,mot)
        toutes_positions=position+toutes_positions
        mot_a_afficher=mot_afficher(toutes_positions,mot)
        print (mot_a_afficher)
     
        if lettre in mot:
            print ("Bien joué")
        else:
            print ("La lettre n'est pas dans le mot")
            chance=chance-1
        if mot_a_afficher==mot:
            break

  2. #2
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par KnapPilou Voir le message
    Bonjour, je suis en terminale S spé ISN et je dois adapter mon pendu avec Tkinter pour l'interface graphique mais je n'arrive pas à ce que la lettre qui est entré dans le "Entry" sois affecté à la variable "lettre".

    Mon code avec Tkinter :
    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
    from tkinter import *
    #import tkMessageBox
     
    liste_lettre=['a','z','e','r','t','y','u','i','o','p','q','s','d','f','g','h','j','k','l','m','w','x','c','v','b','n','A','Z','E','R','T','Y','U','I','O','P','Q','S','D','F','G','H','J','K','L','M','W','X','C','V','B','N']
     
    def recuperer():
        Lettre = lettre.get()
     
    def choix_lettre():
        if lettre in liste_lettre:
            lettres_utilisees.append(lettre)
            entry_1.destroy
            entry_1=Entry(fenetre, textvariable=lettre)
            entry_1.pack()
     
    lettres_utilisees=[]
    toutes_positions=[]
     
    fenetre = Tk()
    fenetre.title('Pendu v1.0')
    bouton_quit=Button(fenetre, text='Quitter', command=fenetre.destroy)
    bouton_quit.pack(side=BOTTOM)
     
    lettre=StringVar()
     
    entry_1=Entry(fenetre, textvariable=lettre)
    entry_1.pack()
    bouton_l=Button(fenetre, text='Valider', command=recuperer)
    bouton_l.pack()
     
    choix_lettre()
     
    canvas=Canvas(fenetre, width=150, height=120, bg='grey')
    canvas.pack()    
     
    fenetre.mainloop()
    Bonsoir,
    Il y a plusieurs problèmes.
    En premier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def recuperer():
        Lettre = lettre.get()
    La variable "Lettre" est perdue à la sortie de la fonction.
    Si la volonté était de d'avoir une autre variable, il ne faut pas utiliser de majuscule.
    Si le but était de modifier la variable "lettre", en plus de la majuscule, l'assignation écrase la "StringVar".

    D'autre part, quelle technique permet d'entrer dans la fonction "choix_lettre"?
    (Le script n'y entre qu'une seule et unique fois… et sans valeur pour la variable "lettre")

    Clodion

    PS: pour un programme commandé par les événements, les fonctions doivent être appelées par les… événements!

  3. #3
    Candidat au Club
    Homme Profil pro
    Terminale S spé ISN
    Inscrit en
    Novembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Terminale S spé ISN

    Informations forums :
    Inscription : Novembre 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Je l'ai fais rentré qu'une seule fois pour l'instant mais une fois ça fonctionnel mais regardez l'autre pendu sous version texte, avec un while la boucle permettra d'executer choix_lettre.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par KnapPilou Voir le message
    Je l'ai fais rentré qu'une seule fois pour l'instant mais une fois ça fonctionnel mais regardez l'autre pendu sous version texte, avec un while la boucle permettra d'executer choix_lettre.
    Bonsoir,
    Non, non… Avec des fenêtres (tkinter), c'est de la programmation événementielle! Il n'y aura pas de boucle "while"!
    C'est lorsqu'un bouton sera pressé, ou qu'une modification sera détectée, que les fonctions seront lancées.
    Ce qui se fait avant, sont uniquement les initialisations.

    C'est donc à partir de la fonction "recuperer" que tout le travail doit être fait.
    Une bonne partie du script en "texte" peut être réutilisée, mais il faut qu'elle soit réarrangée. La portée des variables devient très importante!

    Sinon, les remarques de mon commentaire précédent sont toujours d'actualité.

    Clodion

    PS: pour la compréhension, il faut modifier la fonction "recuperer":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def recuperer():
        Lettre = lettre.get()
        print(Lettre)
    La lettre est bien transmise…

  5. #5
    Candidat au Club
    Homme Profil pro
    Terminale S spé ISN
    Inscrit en
    Novembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Terminale S spé ISN

    Informations forums :
    Inscription : Novembre 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour, un grand merci pour tout ça, j'ai bien mieux compris comment fonctionne tkinter.
    Mais maintenant un autre problème se pose à moi, dans la version du pendu en texte, nous avions des fonctions permettant de trouver l'emplacement des lettre etc... Mais dois-je mettre ces fonctions dans ma fonction recuperer maintenant sous tkinter ? Ou alors les mettes indépendamment de cette fonction et les faire interagir entre elles ?

    Mon code actuellement :
    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
     from tkinter import *
    import random
    #==============================================================================#
    liste_lettre=['a','z','e','r','t','y','u','i','o','p','q','s','d','f','g','h','j','k','l','m','w','x','c','v','b','n','A','Z','E','R','T','Y','U','I','O','P','Q','S','D','F','G','H','J','K','L','M','W','X','C','V','B','N']
    liste_de_mot=["kebab","mort","jeux","mot","amour","joue","cou","vide","vif","grenier","orage","tromper","guitar","chinois","noir","blanc","vert","billet","drogue","cigarette","gaulois","tigre","chat","chien"]
    mot=random.choice(liste_de_mot)
    chance = 8
    lettres_utilisees=[]
    toutes_positions=[]
    #==============================================================================#
    def recuperer():
        Lettre = lettre.get()
        entry_1.delete(0, 'end')
        print(Lettre)
        if Lettre in liste_lettre:
            lettres_utilisees.append(Lettre)
            print(lettres_utilisees)
        else:
            messagebox.showinfo('Pendu v1.0', "Vous n'avez pas choisis de lettre valide, veuillez en choisir une autre.")
     
    #==============================================================================#
    fenetre = Tk()
    fenetre.title('Pendu v1.0')
    bouton_quit=Button(fenetre, text='Quitter', command=fenetre.destroy)
    bouton_quit.pack(side=BOTTOM)
     
    lettre=StringVar()
     
    entry_1=Entry(fenetre, textvariable=lettre)
    entry_1.pack()
    bouton_l=Button(fenetre, text='Valider', command=recuperer)
    bouton_l.pack()
     
    canvas=Canvas(fenetre, width=150, height=120, bg='grey')
    canvas.pack()    
     
    fenetre.mainloop()

  6. #6
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par KnapPilou Voir le message
    Bonjour, un grand merci pour tout ça, j'ai bien mieux compris comment fonctionne tkinter.
    Mais maintenant un autre problème se pose à moi, dans la version du pendu en texte, nous avions des fonctions permettant de trouver l'emplacement des lettre etc... Mais dois-je mettre ces fonctions dans ma fonction recuperer maintenant sous tkinter ? Ou alors les mettes indépendamment de cette fonction et les faire interagir entre elles ?
    Bonjour,
    Oui, il faut les appeler de cette fonction.
    C'est bien lorsque la lettre "entre" dans le script (par la fonction "recuperer") qu'elle doit être traitée (non-répétition, position…, et affichage du résultat).

    Clodion

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

Discussions similaires

  1. Interface graphique pour NMAP sous windows ?
    Par elitost dans le forum Développement
    Réponses: 2
    Dernier message: 07/11/2005, 00h09
  2. Interface graphique pour administrer un annuaire LDAP???
    Par SnipCool dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 09/06/2005, 17h40
  3. Interface graphique pour utilisateur
    Par Missvan dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 14/02/2005, 09h56
  4. [FEDORA] Interface graphique pour partager connexion
    Par booboo dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 15/06/2004, 13h14
  5. [Kylix] Interface graphique pour lognes de commande linux
    Par lecharcutierdelinux dans le forum EDI
    Réponses: 6
    Dernier message: 29/08/2003, 10h20

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