Les boutons s'activent seuls à l'exécution du programme
Résolu
Bonjour
Lorsque j'exécute le programme les commandes affiliées aux différents boutons s'exécutent.
Voici le programme entier :
Lorsque j'exécute le programme les commandes affiliées aux différents boutons s'exécutent.
Voici le programme entier :
#import TKinter from tkinter import * from tkinter import Label #import WebBrowser import webbrowser #1st window (name: root) root = Tk() root.title("Short journey") root.geometry("1440x800") root.iconbitmap("icon.ico") #displays #Background root.config(background="#370909") #buttons commands def play_butt(): webbrowser.open_new("https://www.reddit.com/r/Minecraftbuilds/comments/tig6xg/i_built_this_fortress_in_a_mountain/") def options_butt(): webbrowser.open_new("https://www.reddit.com/r/Minecraft/comments/tijf4r/render_i_made_for_a_contest_build_not/") def language_butt(): webbrowser.open_new("https://www.reddit.com/r/Minecraftbuilds/comments/tijfhy/made_some_elemental_starter_bases/") def _4th_butt(): webbrowser.open_new("https://www.reddit.com/r/Minecraftbuilds/comments/tikcl4/a_custom_mountain_i_made_with_world_edit/") #Labels lbl_frame = Frame(root, bg="#370909", bd=0, relief=SUNKEN,) butt_frame = Frame(root, bg="#280707", bd=20, relief=SUNKEN,) lbl0 = Label(lbl_frame, text="Welcome to", font=("Consolas", 30), bg="#370909", fg="black",) lbl1 = Label(lbl_frame, text="Pythopia", font=("Consolas", 100), bg="#370909",fg="black") #Bg Image width = 500 height = 500 image = PhotoImage(file="image.png").zoom(69).subsample(35) canvas = Canvas(root, width=width, height= height, bg="#370909", bd=0) canvas.create_image(width/2, height/2, image=image,) #Buttons play_butt = Button(butt_frame, text="Play", font=("Consolas", 25), bg="black", fg="#280707", bd=5, command = play_butt(),) options_butt = Button(butt_frame, text="Options", font=("Consolas", 25), bg="black", fg="#280707", bd=5, command = options_butt(),) language_butt = Button(butt_frame, text="Language", font=("Consolas", 25), bg="black", fg="#280707", bd=5, command = language_butt(),) _4th_butt = Button(butt_frame, text=" 4th option ", font=("Consolas", 25), bg="black", fg="#280707", bd=5, command = _4th_butt(),) #diplay all lbl0.pack() lbl1.pack() play_butt.pack(pady=25, fill=X) options_butt.pack(pady=25, fill=X) language_butt.pack(pady=25, fill=X) _4th_butt.pack(pady=25, fill=X) lbl_frame.pack(side=TOP, expand=YES) butt_frame.pack(side=TOP, expand=YES) #canvas.pack(expand=YES) #start window(root) root.mainloop()
A voir également:
- Les boutons s'activent seuls à l'exécution du programme
- A quoi servent les boutons de couleur sur une telecommande - Guide
- Programme demarrage windows - Guide
- Comment réinitialiser un téléphone avec les boutons - Guide
- Application pour reconnaître les boutons - Accueil - Outils
- Mettre en veille un programme - Guide
4 réponses
« Bonjour », « merci » ou « s'il vous plait » sont essentiels à toute demande car ces mots marquent la politesse élémentaire et montrent le respect que tout demandeur devrait avoir envers les bénévoles qui animent ce forum.
Et une fois encore, pour poster un code, surtout en python, il faut faire comme décrit là https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code pas d'effort pour simplifier la tache aux bénèvoles égal pas d'effort de leur part pour te répondre.
Merci donc de reformuler correctement ta question.
Et une fois encore, pour poster un code, surtout en python, il faut faire comme décrit là https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code pas d'effort pour simplifier la tache aux bénèvoles égal pas d'effort de leur part pour te répondre.
Merci donc de reformuler correctement ta question.
Bonjour,
Quelques recommandations, car tu payes ton manque de rigueur :
Voici un exemple minimal fonctionnel :
Bonne chance
Quelques recommandations, car tu payes ton manque de rigueur :
- quand tu développes, teste au fur et à mesure (inutile de "copier coller" 4 boutons tant que le premier de marche pas) ;
- dans la même veine, quand tu postes un message, fais un exemple minimal qui met en évidence ton problème ;
- ne mets pas de virgules avant les parenthèse fermante des appels de fonctions : cela signifie que tu passes un argument supplémentaire, et ça peut rapidement faire n'importe quoi ;
- ne confonds pas un pointeur de fonction et la valeur de retour de cette fonction :
tk.Button
attend pour l'argumentcommand=
un pointeur de fonction (e.g.play_butt
) et non la valeur que retourne cette fonction (e.g.play_butt()
, qui ici vautNone
). En gros, ce que tu as écrit signifie : au moment de déclarer le bouton, j'appelle la fonctionplay_butt
(ce qui ouvre le navigateur), puis je récupère la valeur de retour (doncNone
), j'installe ce pointeur sur mon bouton (donc il n'aura pas de callback et ne fera rien quand on cliquera dessus).
Voici un exemple minimal fonctionnel :
from tkinter import * root = Tk() def play_butt(): print("coucou") play_butt = Button(root, text="coucou", command=play_butt) play_butt.pack() root.mainloop()
Bonne chance
après avoir simplifié mon code et l'avoir comparé a la solution donnée j'ai compris que le problème c'était juste deux parenthèses.
ca me déprime un peu...
ca me déprime un peu...
Bonjour
Ici, il est question de parenthèses et de virgules mal placées (n’importe comment ? ).
Dans ta question précédente il était question d’héritage incompris.
Je t’y ai d’ailleurs invité à lire ceci https://codes-sources.commentcamarche.net/forum/affich-10107769-message-a-tous-les-debutants-souvent-autodidactes#p10107769
Ici mamiemando parle de manque de rigueur, c’est vrai, mais je pense que le problème de fond est qu’avant de dériver une classe il faut savoir:
De même avant de manipuler une interface graphique, il faut savoir:
Bref faire les choses dans l’ordre.
On en est à 4 jours entre tes 2 questions, 4 jours que tu aurais pu mettre à profit pour apprendre ces bases et ne pas faire ce genres d’erreurs « bêtes »
ca me déprime un peu...
Ici, il est question de parenthèses et de virgules mal placées (n’importe comment ? ).
Dans ta question précédente il était question d’héritage incompris.
Je t’y ai d’ailleurs invité à lire ceci https://codes-sources.commentcamarche.net/forum/affich-10107769-message-a-tous-les-debutants-souvent-autodidactes#p10107769
Ici mamiemando parle de manque de rigueur, c’est vrai, mais je pense que le problème de fond est qu’avant de dériver une classe il faut savoir:
- placer ses virgules correctement
- placer ses parenthèses correctement
- passer n paramètres à une fonction
- ce que c’est une classe
- initialiser une classe et comprendre à quoi sert self
De même avant de manipuler une interface graphique, il faut savoir:
- placer ses virgules correctement
- placer ses parenthèses correctement
- passer n paramètres à une fonction
- ce qu’est un callback
Bref faire les choses dans l’ordre.
On en est à 4 jours entre tes 2 questions, 4 jours que tu aurais pu mettre à profit pour apprendre ces bases et ne pas faire ce genres d’erreurs « bêtes »
la ligne 50 est désactivé délibérément.