Création automatique de fonction
Résolu/Ferméyg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 - 14 déc. 2022 à 14:53
- Création automatique de fonction
- Fonction si et - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Creation compte gmail - Guide
- Message automatique thunderbird - Guide
- Logiciel de sauvegarde automatique gratuit - Guide
12 réponses
10 déc. 2022 à 15:55
Bonjour
Le truc, c'est que le frame est créer de toute pièce quand l'utilisateur clique sur le bouton +. Il faut donc que la fonction soit crée de toute pièce
heu, non, il suffit de récupérer l'instance du frame où se trouve la souris ou de la stocker dans une liste (par exemple) au moment de la création.
Je ne suis pas assez bon en python pour te faire un exemple.
10 déc. 2022 à 16:17
Merci mais le frame concerné peut varier, ce n'est pas toujours le même.
10 déc. 2022 à 17:22
mais le frame concerné peut varier
Oui, d'où l'idée de récupérer l'instance concernée ou de la stocker.
Modifié le 10 déc. 2022 à 17:29
bonjour,
Je pense que ce que tu souhaites faire, c'est, quand le bouton est cliqué, appeler une fonction avec un paramètre.
Si tu montres ton code, nous pourrons sans doute te montrer comment réaliser cela.
10 déc. 2022 à 17:38
SI tu veux associer au bouton la fonction clic() avec un paramètre, disons 123, tu peux faire ainsi:
, command=lambda clic(123) ,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question10 déc. 2022 à 18:12
From tkinter import * Nbdeprojet = 0 Nbdeprojetsplus1 = Nbdeprojet+1 Fenêtre = Tk() Def supprimer projet (): #Suppression de la frame dont le numéro est la variable frameactive Def creerprojet (): globals["Projet"+str(nbdeprojetsplus1+"num"]= str(nbdeprojetsplus1) Globals["FrameProjet"+str(nbdeprojetsplus1)]= Frame(Fenêtre) ["frameProjet"+str(nbdeprojetsplus1)].pack() Globals["ButtonSupprimerProjet"+str(nbdeprojetsplus1)]=Button(frameProjet,command= Supprimer projet) ["ButtonSupprimerProjet"+str(nbdeprojetsplus1)].pack() Nbdeprojet = Nbdeprojet+1 BoutonAjouterProjet = Button(Fenêtre, command = creerprojet) BoutonAjouterProjet.pack() Fenêtre.mainloop()
10 déc. 2022 à 18:18
Pourquoi partages-tu du code qui ne fonctionne pas?
Plein d'erreurs.
10 déc. 2022 à 18:13
Je voudrais que la variable active = le numéro de la frame que la souris survole.
10 déc. 2022 à 18:20
C'est parce que je n'ai pas encore le code. Je l'ai fait maintenant selon ce que je voudrais faire plus tard.
10 déc. 2022 à 18:52
ainsi:
import tkinter mesprojets=[] class Projet: def __init__(self): mesprojets.append(self) self.num=str(Nbdeprojet+1) fp=tkinter.Frame(Fenêtre) self.frameprojet=fp bt=tkinter.Button(fp,text="REMOVE "+self.num,command= lambda: Projet.supprimerprojet(self)) fp.pack() bt.pack() def supprimerprojet(self): self.frameprojet.destroy() print("suppression projet",self.num) mesprojets.remove(self) print("il reste",str(len(mesprojets)),"projets") Nbdeprojet = 0 def creerprojet(): global Nbdeprojet np=Projet() Nbdeprojet = Nbdeprojet+1 Fenêtre = tkinter.Tk() BoutonAjouterProjet = tkinter.Button(Fenêtre, command = creerprojet) BoutonAjouterProjet.pack() Fenêtre.mainloop()
11 déc. 2022 à 11:25
Merci beaucoup ça marche. Vous êtes vraiment des programmateurs de fou... Merci.
11 déc. 2022 à 12:35
une variante:
import tkinter class Projet: mesprojets=[] Nbdeprojet = 0 def __init__(self): Projet.mesprojets.append(self) self.num=str(Projet.Nbdeprojet+1) fp=tkinter.Frame(Fenêtre) self.Frame=fp bt=tkinter.Button(fp,text="REMOVE "+self.num,command= lambda: Projet.supprimerprojet(self)) fp.pack() bt.pack() Projet.Nbdeprojet = Projet.Nbdeprojet+1 def __del__(self): print("bye",self.num) def supprimerprojet(self): self.Frame.destroy() print("suppression projet",self.num) Projet.mesprojets.remove(self) print("il reste",str(len(Projet.mesprojets)),"projets") def fini(): Projet.mesprojets=[] print("bye bye") Fenêtre = tkinter.Tk() BoutonAjouterProjet = tkinter.Button(Fenêtre, text="nouveau projet",command = lambda:Projet()) BoutonAjouterProjet.pack() Fenêtre.mainloop() Projet.fini()
11 déc. 2022 à 12:38
peux-tu, alors, marquer la discussion comme résolue?
13 déc. 2022 à 20:03
Dans le code que tu proposes en #7, tu crées dynamiquement des variables, en utilisant globals()[abcd]. Exemple:
Globals["FrameProjet"+str(nbdeprojetsplus1)]= Frame(Fenêtre)
Ce n'est pas une bonne pratique. Regarde comment j'ai fait autrement dans le code que j'ai suggéré.
14 déc. 2022 à 10:47
Tu as utilisé self, c'est ça ?
14 déc. 2022 à 14:53
La prochaine fois que tu es tenté d'utiliser globals(), fais appel, nous pourrons suggérer une meilleure approche.
14 déc. 2022 à 07:48
Vous êtes vraiment des programmateurs de fou
Alors non, et non, d'abord un programmateur c'est oar exemple, le bouton de la machine à laver qui te permet de choisir entre un cycle pour laver le blanc ou un pour laver la couleur.
Nous sommes (toi y compris) programmeur ou développeur.
Ensuite, https://codes-sources.commentcamarche.net/forum/affich-10107769-message-a-tous-les-debutants-souvent-autodidactes#p10107769 C'est caricatural, mais cette discussion et quelques une des précédentes tendent à montrer que ça te concerne en parti
14 déc. 2022 à 10:49
Ok. Désolé ;)
J'essaye un maximum d'apprendre comme il le faudrait mais c'est vrai que c'est un peu compliqué...
;)
En tous cas, merci