Menu

Boutons [Résolu/Fermé]

titi - 18 avril 2017 à 13:44 - Dernière réponse :  titi
- 19 avril 2017 à 23:45
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
Afficher la suite 

2 réponses

+1
Utile
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 :

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
Cette réponse vous a-t-elle aidé ?  
Super, j'ai essayé les deux méthodes et ça marche. Merci beaucoup gudu