Bonjour,
Difficile pour moi de trouver le titre ...
Donc voici mon pb. Je créé une fenêtre avec un titre, des boutons, une zone de saisie et une zone de texte. Ce bout de code est censé ouvrir une fenêtre et proposer à l'interlocuteur un certain nombre de choix de tirage de dé, puis lui renvoyer le résultat dans une zone Label modifiée en fonction du résultat. Pour l'instant, toutes les fonctions de calculs de tirage sont validées et maintenant, je travaille sur l'interface graphique. C'est pour cela que sur les différents softs que vous verrez ci-dessous, il y a pas mal de lignes en argument sur la partie graphique.
Mon historique de programmation sont principalement turbo-pascal orienté objet et ada. Donc j'ai été formé à une certaine rigueur dont je ne peux me démettre --> Trop vieux ;-)
Après avoir navigué sur différents tutoriaux pour arriver à sortir qqchose en interface graphique, j'ai trouvé ce genre de code :
D'après ce que je comprends, ce code modifie le texte du Label "label" dans une fonction "counter_label". Par contre, je ne vois aucun "return" dans la fonction "counter_label" pour renvoyer proprement les modifications faites sur le Label "label". Et là, voyez-vous, i'm chocking ...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import Tkinter as tk counter = 0 def counter_label(label): def count(): global counter counter += 1 label.config(text=str(counter)) label.after(1000, count) count() root = tk.Tk() root.title("Counting Seconds") label = tk.Label(root, fg="green") label.pack() counter_label(label) button = tk.Button(root, text='Stop', width=25, command=root.destroy) button.pack() root.mainloop()
Donc, j'ai réalisé un bout de code pour tester tout cela. Il y a le code principal qui fait appel à "fenetre_choix.py" qui va utiliser des fonctions de "fonctions_jeux.py". Toutes les fonctions présentes dans "fonctions_jeux.py" ne font que du calcul mathématique, ne renvoie qu'une valeur, ont été testées et fonctionnent. Le pb se trouve dans "fenetre_choix.py".
Première question : comment gérer le renvoi d'une fonction appelée par "command=" d'un widget Button ? (choix_lancement_de dans le script renvoie la valeur calculée mais comment faire avec "command=")
Deuxième question : Comment modifier proprement le textvariable du Label "txt2_fen_lancement_de" ? (utiliser le renvoi de la fonction "choix_lancement_de" dans la fonction "cmd_lancement_de")
Troisième question : Rentrer une valeur dans la fenêtre de saisie génère une erreur. Je pense que je ne maîtrise pas du tout le widget Entry ... (tjs le même espoir ... appeler la fonction avec des arguments et la dite fonction renvoie un résultat ...
code principal "fenetre_generale":
La fonction appelée par le code "fenetre_principale" :Code:
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 from tkinter import * # module de gestion de l'interface graphique du prg from fonctions_jeux import * # module contenant la boite a outils pour les calculs de nombres aleatoires from fenetres_choix import * # module contenantla gestion des differentes fenetres choisies dans la fenetre principale fen_g = Tk() fen_g.title('Tirage aleatoire') b1_fen_g = Button(fen_g, text='Tirage purement aleatoire', command=cmd_lancement_de) b1_fen_g.grid(row=1, padx=5, pady=5) #b2_fen_g = Button(fen_g, text='Tirage aleatoire pondere basique', command=cmd_pondere_basique) #b2_fen_g.grid(row=2, padx=5, pady=5) # #b3_fen_g = Button(fen_g, text='Tirage aleatoire pondere gaussien', command=cmd_pondere_gaussien) #b3_fen_g.grid(row=3, padx=5, pady=5) # #b4_fen_g = Button(fen_g, text='Tirage aleatoire pondere "triangulaire"', command=cmd_pondere_triangulaire) #b4_fen_g.grid(row=4, padx=5, pady=5) b5_fen_g = Button(fen_g, text='Quitter', command=fen_g.quit) b5_fen_g.grid(row=5, padx=5, pady=5) fen_g.mainloop() fen_g.destroy()
Merci pour vos futures réponses.Code:
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
63
64
65
66 from tkinter import * # module de gestion de l'interface graphique du prg from fonctions_jeux import * # module contenant la boite a outils pour les calculs de nombres aleatoires def choix_lancement_de(valeur): if valeur > 1 : resultat = lancement_de(valeur) if valeur == 2 : if resultat == 1 : piece = "PILE" if resultat == 2 : piece = "FACE" affichage_resultat = "Pile/Face = " + piece if valeur > 2 : affichage_resultat = "Resultat du De a " + str(valeur) + " faces = " + str(resultat) else : affichage_resultat = "Resultat = *****" return (affichage_resultat) def eval_valeur(event): choix_lancement_de(eval(entree1_fen_lancement_de.get())) def cmd_lancement_de(): nb_de_face = "0" fen_lancement_de = Tk() fen_lancement_de.title('Tirage purement aleatoire') nb_de_face = StringVar() aff_resultat = StringVar() b1_fen_lancement_de = Button(fen_lancement_de, text='Pile ou Face', command = lambda x=2 : choix_lancement_de(x)) b1_fen_lancement_de.grid(row=0, padx=5, pady=5) b2_fen_lancement_de = Button(fen_lancement_de, text='De a 4 faces', command = lambda x=4 : choix_lancement_de(x)) b2_fen_lancement_de.grid(row=0, column=1, padx=5, pady=5) b3_fen_lancement_de = Button(fen_lancement_de, text='De a 6 faces', command = lambda x=6 : choix_lancement_de(x)) b3_fen_lancement_de.grid(row=1, padx=5, pady=5) b4_fen_lancement_de = Button(fen_lancement_de, text='De a 10 faces', command = lambda x=10 : choix_lancement_de(x)) b4_fen_lancement_de.grid(row=1, column=1, padx=5, pady=5) b5_fen_lancement_de = Button(fen_lancement_de, text='De a 20 faces', command = lambda x=20 : choix_lancement_de(x)) b5_fen_lancement_de.grid(row=2, padx=5, pady=5) b6_fen_lancement_de = Button(fen_lancement_de, text='De a 100 faces', command = lambda x=100 : choix_lancement_de(x)) b6_fen_lancement_de.grid(row=2, column=1, padx=5, pady=5) txt1_fen_lancement_de = Label(fen_lancement_de, text = 'Nombre de faces = ') txt1_fen_lancement_de.grid(row=3, padx=5, pady=5) entree1_fen_lancement_de = Entry(fen_lancement_de, textvariable = nb_de_face) entree1_fen_lancement_de.grid(row=3, column=1, padx=5, pady=5) entree1_fen_lancement_de.bind("<Return>", eval_valeur) b7_fen_lancement_de = Button(fen_lancement_de, text='Quitter', command=fen_lancement_de.quit) b7_fen_lancement_de.grid(row=4, padx=5, pady=5) txt2_fen_lancement_de = Label(fen_lancement_de, textvariable=aff_resultat) txt2_fen_lancement_de.grid(row=5, padx=5, pady=5) fen_lancement_de.mainloop() fen_lancement_de.destroy()