Boutons
Résolu
titi
-
titi -
titi -
Bonjour,
j'ai essayé de faire l'exercice 8.7 du livre de Swinnen
"Apprendre à programmer avec python 3"
je ne comprend pas pourquoi les boutons que j'ai créé sur Python 3.6 ne fonctionnent pas correctement : les cercles ne devraient apparaître que lorsque j'appuie sur les boutons, et pas avant. De plus, le fait d’appuyer sur les boutons ne fait rien. J’ai essayé 3 méthode pour faire les boutons, mais rien n’y fait.
Pouvez-vous m’aider ?
#anneaux olympiques
from tkinter import *
# --- définition des fonctions gestionnaires d'événements : ---
def drawcircle(x1,y1,x2,y2,coul):
"Tracé d'un cercle dans le canevas can1"
can1.create_oval(x1,y1,x2,y2,width=19,outline=coul)
# Création du widget principal ("maître") :
fen1 = Tk()
# création des widgets "esclaves" :
can1 = Canvas(fen1,bg='white',height=620,width=1300)
can1.pack(side=TOP)
bou1 = Button(fen1,text='Quitter',command=fen1.quit)
bou1.pack(side=RIGHT)
Button(fen1,text='Premier',command=drawcircle(10,10,410,410,'blue')).pack(side=LEFT)#ce bouton ne marche pas
bou3 = Button(fen1,text='Deuxieme',command=can1.create_oval(230,210,630,610,width=19,outline='yellow'))
bou3.pack(side=LEFT)#ce bouton ne marche pas
bou4 = Button(fen1,text='Troisieme',command=drawcircle(450,10,850,410,'black'))
bou4.pack(side=LEFT)#ce bouton ne marche pas
drawcircle(670,210,1070,610,'green')
drawcircle(890,10,1290,410,'red')
fen1.mainloop() # démarrage du réceptionnaire d’événements
fen1.destroy() # destruction (fermeture) de la fenêtre
j'ai essayé de faire l'exercice 8.7 du livre de Swinnen
"Apprendre à programmer avec python 3"
je ne comprend pas pourquoi les boutons que j'ai créé sur Python 3.6 ne fonctionnent pas correctement : les cercles ne devraient apparaître que lorsque j'appuie sur les boutons, et pas avant. De plus, le fait d’appuyer sur les boutons ne fait rien. J’ai essayé 3 méthode pour faire les boutons, mais rien n’y fait.
Pouvez-vous m’aider ?
#anneaux olympiques
from tkinter import *
# --- définition des fonctions gestionnaires d'événements : ---
def drawcircle(x1,y1,x2,y2,coul):
"Tracé d'un cercle dans le canevas can1"
can1.create_oval(x1,y1,x2,y2,width=19,outline=coul)
# Création du widget principal ("maître") :
fen1 = Tk()
# création des widgets "esclaves" :
can1 = Canvas(fen1,bg='white',height=620,width=1300)
can1.pack(side=TOP)
bou1 = Button(fen1,text='Quitter',command=fen1.quit)
bou1.pack(side=RIGHT)
Button(fen1,text='Premier',command=drawcircle(10,10,410,410,'blue')).pack(side=LEFT)#ce bouton ne marche pas
bou3 = Button(fen1,text='Deuxieme',command=can1.create_oval(230,210,630,610,width=19,outline='yellow'))
bou3.pack(side=LEFT)#ce bouton ne marche pas
bou4 = Button(fen1,text='Troisieme',command=drawcircle(450,10,850,410,'black'))
bou4.pack(side=LEFT)#ce bouton ne marche pas
drawcircle(670,210,1070,610,'green')
drawcircle(890,10,1290,410,'red')
fen1.mainloop() # démarrage du réceptionnaire d’événements
fen1.destroy() # destruction (fermeture) de la fenêtre
A voir également:
- Boutons
- A quoi servent les boutons de couleur sur une telecommande - Guide
- Comment réinitialiser un téléphone avec les boutons - Guide
- Application pour reconnaître les boutons - Accueil - Outils
- Comment déverrouiller un samsung avec les boutons - Guide
- Boutons latéraux souris ne fonctionne plus ✓ - Forum souris / Touchpad
1 réponse
Problème basique et récurrent liés aux boutons tkinter.
Il faut soit utiliser lambda, je te suggère de rechercher sur le web pour en comprendre l'utilisation et le fonctionnement.
Soit utiliser des fonctions personnalisées à passer en paramètre de command, car command doit contenir le nom d'une fonction et non son appel.
Avec lambda donc :
Il faut soit utiliser lambda, je te suggère de rechercher sur le web pour en comprendre l'utilisation et le fonctionnement.
Soit utiliser des fonctions personnalisées à passer en paramètre de command, car command doit contenir le nom d'une fonction et non son appel.
Avec lambda donc :
Button(fen1,text='Premier',command=lambda d=drawcircle: d(10,10,410,410,'blue')).pack(side=LEFT)#ce bouton ne marche pas
bou3 = Button(fen1,text='Deuxieme',command=lambda can1=can1: can1.create_oval(230,210,630,610,width=19,outline='yellow'))
bou3.pack(side=LEFT)#ce bouton ne marche pas
bou4 = Button(fen1,text='Troisieme',command=lambda d=drawcircle: d(450,10,850,410,'black'))
bou4.pack(side=LEFT)#ce bouton ne marche pas
titi
Super, j'ai essayé les deux méthodes et ça marche. Merci beaucoup gudu