Signaler

Boutons [Résolu]

Posez votre question titi - Dernière réponse le 19 avril 2017 à 23:45 par 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
Afficher la suite 
Utile
+1
plus moins
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
titi- 19 avril 2017 à 23:45
Super, j'ai essayé les deux méthodes et ça marche. Merci beaucoup gudu
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !