Création automatique de fonction
Résoluyg_be Messages postés 23437 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
Que Notch soit avec vous
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.
-
Merci mais le frame concerné peut varier, ce n'est pas toujours le même.
-
mais le frame concerné peut varier
Oui, d'où l'idée de récupérer l'instance concernée ou de la stocker.
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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 question -
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() -
Je voudrais que la variable active = le numéro de la frame que la souris survole.
-
C'est parce que je n'ai pas encore le code. Je l'ai fait maintenant selon ce que je voudrais faire plus tard.
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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() -
-
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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