Création automatique de fonction

Résolu/Fermé
Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023 - 10 déc. 2022 à 15:12
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

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


12 réponses

Utilisateur anonyme
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.


0
Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023
10 déc. 2022 à 16:17

Merci mais le frame concerné peut varier, ce n'est pas toujours le même.


0

Salut, qu'est-ce qui t'empêche de modifier les commandes de tes boutons lorsqu'une nouvelle frame est créée ?

0
Utilisateur anonyme
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.


0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
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.

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
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) , 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023
10 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()
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
10 déc. 2022 à 18:18

Pourquoi partages-tu du code qui ne fonctionne pas?

Plein d'erreurs.

0
Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023
10 déc. 2022 à 18:13

Je voudrais que la variable active = le numéro de la frame que la souris survole.


0
Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023
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.


0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
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()
0
Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023
11 déc. 2022 à 11:25

Merci beaucoup ça marche. Vous êtes vraiment des programmateurs de fou... Merci.


0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
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()
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
11 déc. 2022 à 12:38

peux-tu, alors, marquer la discussion comme résolue?

1
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
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é.

0
Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023
14 déc. 2022 à 10:47

Tu as utilisé self, c'est ça ?

0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557 > Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023
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.

0
Utilisateur anonyme
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

0
Pr.Witherfire Messages postés 79 Date d'inscription samedi 5 novembre 2022 Statut Membre Dernière intervention 25 février 2023
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


0
Utilisateur anonyme
14 déc. 2022 à 11:09

Et bien fais les choses dans l'ordre, commence par prendre quelques jours pour apprendre les bases, et reprends ton projet ensuite.

Tu n'auras pas la.solution à toutes les difficultés que tu rencontreras, mais quand tu poseras une question, tu auras les acquis pour comprendre les réponses.

0