IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Recharger une classe en cours d'exécution


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Par défaut Recharger une classe en cours d'exécution
    Bonjour,
    Je développe une application Python/Tkinter. Initialement, le code charge une classe avec des Entries avec des variables reliées entre elles par des callbacks:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.truc=Classe(divers,arguments)
    Dans mon menu, j'ai une option "Nouveau" qui remet à zéro les variables. Le problème est que les callbacks ne sont pas effectués. Je cherche alors un code pour que la classe soit rechargée lorsque je presse "Nouveau". Une méthode du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def nouveau():
    relance(self.truc)
    Ainsi, les callbacks seront effectués. Quelqu'un connaît-il une telle commande?
    Merci.

  2. #2
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Par défaut
    J'ai fini par touver le truc: au premier appel de la classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    self.args=(plusieurs,arguments)
    self.truc=Classe(*self.args)
    et ensuite dans le code du bouton "Nouveau"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def nouveau():
    self.truc.__class__(*self.args)
    Je ne sais pas s'il existe une meilleure programmation, mais ce code marche.

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Tu dois relancer certaines choses ? Pourquoi ne mets-tu pas ces choses dans une méthode que tu vas rappeler au moment de la réinitialisation ? C'est ce qui est fait généralement. Appeler la méthode __class__ est... peu recommandée, on ne sait pas forcément ce qui se passe réellement.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Par défaut
    C'est gentil de te pencher sur ma question. Je crois que j'ai assez bien décrit ce que je veux dans le premier message. Je souhaite vraiment relancer la classe, pas par son nom propre mais par son alias (ici self.truc). La raison est que le nom de la classe peut changer, mais pas l'alias.

    Entretemps j'ai aussi cherché à insérer un __call__ dans les classes ce qui aurait permis de faire (si j'ai bien compris) un self.truc(*args). Je n'ai pas réussi à résoudre tous les bugs, d'où la programmation avec __class__.

    Je suis conscient que je ne maîtrise pas toutes les implications que peut avoir cette programmation et si tu peux me mettre un bout de code mieux que ce que j'ai, je suis preneur.

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par frites.saucisse Voir le message
    C'est gentil de te pencher sur ma question. Je crois que j'ai assez bien décrit ce que je veux dans le premier message. Je souhaite vraiment relancer la classe, pas par son nom propre mais par son alias (ici self.truc). La raison est que le nom de la classe peut changer, mais pas l'alias.
    Pardon, j'édite, je viens de comprendre ce qui se passe réellement... En fait, tu crées une nouvelle instance de type self.truc, mais tu en fais quoi ?

  6. #6
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Par défaut
    Après avoir détruit l'ancienne instance de self.truc, je la recharge.

    self.truc est une page avec des entries dont les variables sont liées par des callbacks. Lorsque l'utilisateur de l'application demande un nouvel affichage de la page (bouton Nouveau), je recharge self.truc complètement pour que les variables soient initialisées et les callbacks appelés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Forcer la JVM à recharger une classe.
    Par Sierra3193 dans le forum Langage
    Réponses: 12
    Dernier message: 17/01/2009, 22h37
  2. Réponses: 9
    Dernier message: 01/04/2008, 13h34
  3. récupérer des infos sur une application en cours d'exécution
    Par r0d dans le forum Administration système
    Réponses: 5
    Dernier message: 31/01/2008, 15h59
  4. Comment masquer une application en cours d'exécution
    Par wajdiisi2007 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/08/2007, 00h45
  5. arrêt d'une requete en cours d'exécution
    Par fradeo dans le forum DB2
    Réponses: 8
    Dernier message: 21/06/2007, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo