[pyton]Prob de variable et de curseur

lonewolfs Messages postés 51 Statut Membre -  
sebsauvage Messages postés 33415 Statut Modérateur -
Bonjour,

Je viens de terminer avec un ami un programme de revision des tables de multiplication en interface graphique (Tkinter).

Il fonctionne mais il se pose deux problèmes qui a priori depasse ma competence. La variable prenom que je pose au depart n'est pas recuperée et mon programme appelle "anonyme" toutes les personnes qui jouent.

Et lors de la phase de reponse, le curseur ne se place automatiquement a l'endroit de la reponse, ce qui fait que l'utilisateur doit automatiquement faire appel a la souris pour se replacer.

Ce sont deux problèmes que j'aimerais resoudre pour optimiser mon programme.

J'en appelle donc a vos compétences et a votre aide pour me donner un coup de main.

Je vous transmet mon code et vous remercie par avance pour l'aide que vous m'apporterez.

lonewolf

# -*- coding: utf-8 -*-

from Tkinter import *
from random import randrange

def dem_pseudo():
    "Demande le pseudo de l'utilisateur"
    global texte1, bouton1, entree1, compteur1, compteur2
    texte1 = Label(fenetre1, text='Entrez votre prénom')
    texte1.pack()
    entree1 = Entry(fenetre1)
    entree1.pack()
    bouton1 = Button(fenetre1, text='Valider', command=(lambda:choix_pseudo(0)))
    bouton1.pack()
    fenetre1.bind('<Return>', choix_pseudo)

def choix_pseudo(event):
    "Choix du pseudo"
    global texte1, bouton1, entree1, compteur1, compteur2, pseudo
    try:
        str(entree1.get())
    except:
        pseudo = "anonyme"
    else:
        pseudo = str(entree1.get())
        if pseudo == "":
            pseudo = "anonyme"
    entree1.destroy()
    bouton1.destroy()
    dem_table()

def dem_table():
    "Demande à l'utilisateur la table"
    global texte1, bouton1, entree1, compteur1, compteur2, pseudo
    texte1.configure(text='Veuillez choisir votre table de multiplication :')
    entree1 = Entry(fenetre1)
    entree1.pack()
    bouton1 = Button(fenetre1, text='Valider', command=(lambda:choix_table(0)))
    bouton1.pack()
    fenetre1.bind('<Return>', choix_table)

def choix_table(event):
    "Choix de la table à réviser"
    global table, compteur1, compteur2, texte1, bouton1, entree1, pseudo
    try:
        int(entree1.get())
    except:
        table = randrange(1,10)
    else:
        table = int(entree1.get())
    entree1.destroy()
    bouton1.destroy()
    choix_chiffre()

def choix_chiffre():
    "Choix du chiffre"
    global table, chiffre, entree1, bouton1, texte1, compteur1, compteur2, pseudo
    chiffre = randrange(1,10)
    texte1.configure(text=str(chiffre)+' x '+str(table)+' =')
    entree1 = Entry(fenetre1)
    entree1.pack()
    compteur1 += 1
    bouton1 = Button(fenetre1, text='Valider', command=(lambda:val_mult(0)))
    bouton1.pack()
    fenetre1.bind('<Return>', val_mult)
    
def val_mult(event):
    "Validation de la multiplication"
    global table, chiffre, entree1, bouton1, compteur2, bouton2, texte1, texte2, texte3, compteur1, compteur2, pseudo
    bouton1.destroy()
    res_juste = table * chiffre
    try:
        int(entree1.get())
    except:
        res_utilisateur = 0
    else:
        res_utilisateur = int(entree1.get())

    entree1.destroy()
    if res_juste == res_utilisateur:
        texte1.configure(text='Bravo '+str(pseudo)+' ! Tu as trouvé !')
        compteur2 += 1
    else:
        texte1.configure(text='Faux, la réponse était :'+str(res_juste))
    if compteur1 == 10:
        taux = compteur2 * 100 / 10
        texte2 = Label(fenetre1, text='Ton taux de réussite est de : '+str(taux)+' %')
        texte2.pack()
        texte3 = Label(fenetre1, text='Veux tu recommencer ?')
        texte3.pack()
        bouton1 = Button(fenetre1, text='oui', command=recommencer)
        bouton1.pack()
        bouton2 = Button(fenetre1, text='non', command=fenetre1.destroy)
        bouton2.pack()
    else:
        bouton1 = Button(fenetre1, text='on continue :)', command=(lambda:continuer(0)))
        bouton1.pack()
        fenetre1.bind('<Return>', continuer)

def recommencer():
    "Réinitialisateur"
    global table, chiffre, entree1, bouton1, compteur2, bouton2, texte1, texte2, texte3, compteur1, compteur2, pseudo
    texte2.destroy()
    texte3.destroy()
    bouton1.destroy()
    bouton2.destroy()
    compteur1 = 0
    compteur2 = 0
    dem_table()

def continuer(event):
    "Réinitialisateur partiel"
    global table, chiffre, entree1, bouton1, compteur2, bouton2, texte1, texte2, texte3, compteur1, compteur2, pseudo
    bouton1.destroy()
    choix_chiffre()

# Programme principal
fenetre1 = Tk()
fenetre1.title('multiplication')
fenetre1.geometry('300x150')
compteur1 = 0
compteur2 = 0
dem_pseudo()
fenetre1.mainloop()


Ce programme a été crée a partir de mon algorithme et rendons a césar ce qui est à césar, tout le coté graphique a été réalisé par cat_loic
Qu'il en soit remercié ici aussi.

1 réponse

sebsauvage Messages postés 33415 Statut Modérateur 15 664
 
Je fuis le mot "global" comme la peste.

Quand on créé des interfaces graphique, il vaut mieux généralement faire une classe par fenêtre.

Des recommandations:
https://sebsauvage.net/python/gui/index_fr.html
0