Les boutons s'activent seuls à l'exécution du programme

Résolu/Fermé
C_Dedev - Modifié le 21 mars 2022 à 12:06
mamiemando Messages postés 33284 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 septembre 2024 - 23 mars 2022 à 17:45
Bonjour

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()

4 réponses

Whismeril Messages postés 19144 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 septembre 2024 919
20 mars 2022 à 17:19
« 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.
0
C_Dedev Messages postés 13 Date d'inscription dimanche 20 mars 2022 Statut Membre Dernière intervention 19 août 2022
Modifié le 20 mars 2022 à 17:45
Une fois de plus je ne peut pas modifier la quetion posée initialement donc je vous (et tous les gens qui ont lus et lirons ma publication) demande en commentaire de m'excuser pour mon manque de politesse et republie ci-dessous le code avec la balise csharp.

#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()
0
Whismeril Messages postés 19144 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 septembre 2024 919 > C_Dedev Messages postés 13 Date d'inscription dimanche 20 mars 2022 Statut Membre Dernière intervention 19 août 2022
20 mars 2022 à 17:40
Si t'avais mis python dès le départ, ça aurait marché...
0
C_Dedev Messages postés 13 Date d'inscription dimanche 20 mars 2022 Statut Membre Dernière intervention 19 août 2022 > C_Dedev Messages postés 13 Date d'inscription dimanche 20 mars 2022 Statut Membre Dernière intervention 19 août 2022
Modifié le 20 mars 2022 à 17:41
Je précise au cas où,
la ligne 50 est désactivé délibérément.
0
mamiemando Messages postés 33284 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 septembre 2024 7 787
Modifié le 21 mars 2022 à 12:05
Bonjour,

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'argument
    command=
    un pointeur de fonction (e.g.
    play_butt
    ) et non la valeur que retourne cette fonction (e.g.
    play_butt()
    , qui ici vaut
    None
    ). En gros, ce que tu as écrit signifie : au moment de déclarer le bouton, j'appelle la fonction
    play_butt
    (ce qui ouvre le navigateur), puis je récupère la valeur de retour (donc
    None
    ), 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
0
C_Dedev Messages postés 13 Date d'inscription dimanche 20 mars 2022 Statut Membre Dernière intervention 19 août 2022
22 mars 2022 à 22:13
merci pour votre réponse je tacherai de mieux poser ma question la prochaine fois .
0
mamiemando Messages postés 33284 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 septembre 2024 7 787 > C_Dedev Messages postés 13 Date d'inscription dimanche 20 mars 2022 Statut Membre Dernière intervention 19 août 2022
23 mars 2022 à 17:45
Pas de soucis, merci pour ton retour, et bonne continuation :-)
0
C_Dedev Messages postés 13 Date d'inscription dimanche 20 mars 2022 Statut Membre Dernière intervention 19 août 2022
22 mars 2022 à 22:28
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...
0
Whismeril Messages postés 19144 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 septembre 2024 919
23 mars 2022 à 08:13
Bonjour

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 »
0