Création automatique de fonction
Résoluyg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'aimerais créer automatiquement une fonction. J'y arrive pour les variables. Mais pas pour les fonctions.
En fait, je voudrais créer plusieurs ensembles de boutons représentant un projet (déjà créés automatiquement par l'utilisateur avec un bouton) les boutons de ces ensembles ont des buts spéciaux: modifier le projet, supprimer le projet, ouvrir le projet... C'est simple : si par exemple un bouton supprimer projet est cliqué, une fonction de suppression du frame (contenant les boutons) sur lequel la souris est actuellement va être exécutée. Du coup, il faudrait que, quand la souris est sur le frame 3, ça exécute la fonction de mettre la variable Frameconcerné = 3. Si elle survole le frame 5, Frameconcerné = 5, ect... 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
Désolé pour le pavé et les explications douteuses...
Android / Chrome 104.0.0.0
- Création automatique de fonction
- Fonction si et - Guide
- Logiciel de sauvegarde automatique gratuit - Guide
- Réponse automatique thunderbird - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Creation de compte google - Guide
12 réponses
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.
mais le frame concerné peut varier
Oui, d'où l'idée de récupérer l'instance concernée ou de la stocker.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionFrom 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()
C'est parce que je n'ai pas encore le code. Je l'ai fait maintenant selon ce que je voudrais faire plus tard.
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()
Merci beaucoup ça marche. Vous êtes vraiment des programmateurs de fou... Merci.
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()
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é.
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
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