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

GUI Python Discussion :

avec Kivy. Appel d'une fonction d'une classe depuis une autre classe


Sujet :

GUI Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut avec Kivy. Appel d'une fonction d'une classe depuis une autre classe
    Bonjour,
    Merci d'avance à tous ceux qui se pencherons sur mon soucis (incompétence).
    J'ai un programme en Python/Kivy avec fichier kv. J'ai une class 'AdjustmentScreen(Screen)' qui a une fonction changeText(self) et je souhaite utiliser cette fonction depuis une autre class Settings(). Pour l'instant je ne suis arrivé à rien. Voilà le dernier essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    sm = ScreenManager()
    sm.add_widget(AdjustmentScreen(name='Adjustment'))
     
    class Settings():
        path=StringProperty()
        .......
     
        def readFileMes(self,filename):
            ...........
            App.get_running_app().Adj.changeText() #cet appel fonctionne mais ...
     
    class AdjustmentScreen(Screen):
        def __init__(self, **kwargs):
            super(AdjustmentScreen, self).__init__(**kwargs)
     
        def changeText(self):   #j'arrive bien ici mais je ne connais pas 'self'
            print(sm.has_screen('Adjustment')) #True
            print('test change text')
            print(self)   #<Screen name=''>    donc je n'ai pas de lien avec l'objet
            # mon problème dans ce cas c'est que le 'self' ne représente pas le screen et donc je ne peux rien modifier
            self.inputLg.text='test'  #self non connu, ids idem si je l'utilise, bref la bouteille à encre :roll:
            ...........
     
    class HelpSelectKVApp(App):
        Adj=AdjustmentScreen()
        def build(self):
            .............
            return sm
    Voilà j'espère ne pas avoir été trop brumeux, et en fin de compte j'aimerais modifier des labels et boutons de AdjustmentScreen depuis une autre la class Settings avec une fonction de AdjustmentScreen
    Merci d'avance pour toutes suggestions.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Je m'étonne que tu dises que ceci App.get_running_app().Adj.changeText() fonctionne. Adj serait un attribut d'une méthode de l'instance de App.

    Vraiment étrange.

    Comment est instanciée App ? Si c'est une instance.

    Montre le code complet, ce sera plus simple.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Bonjour
    Merci pour votre remarque. Pour finir après beaucoup de tâtonnements, j'ai modifié complètement la structure et les déclarations de mes classes (fichier.py et .kv). En ayant un peu plus réfléchi (?) je suis parvenu maintenant, au fonctionnement souhaité.

    Pour essayer de répondre à la question App une instance ?
    Pour moi si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class HelpSelectApp(App):
        def build(self):
            return >
     
    if __name__ == '__main__':
        HelpSelectApp().run()
    je pense que le système crée une instance 'HelpSelectApp' enfant de la class App. Donc je répondrais non pour App, mais comme je ne suis pas un informaticien, peut-être ai-je faux ?

    Pour le code complet, c'est un peu long >400 lignes sur .py et >420 sur .kv. Mais je mettrais le code en domaine public lorsque cela tournera à peu près.

    Michel

    PS. A la réflexion, c'est vrai que si ce n'est pas une instance alors l'appel ne devrait pas fonctionner. J'envoie le code complet comment ?

Discussions similaires

  1. Problème avec l'appel d'une fonction
    Par tonny lecureux dans le forum C
    Réponses: 1
    Dernier message: 16/12/2017, 22h28
  2. [PHP 5.0] Appel d'une autre fonction de la même classe
    Par Arnaud F. dans le forum Langage
    Réponses: 2
    Dernier message: 11/09/2009, 12h26
  3. Réponses: 2
    Dernier message: 05/02/2009, 09h04
  4. creation de fonction et appel via une autre classe
    Par oceane751 dans le forum Langage
    Réponses: 3
    Dernier message: 21/01/2008, 23h26
  5. problème avec l'appel d'une fonction
    Par mademoizel dans le forum ASP
    Réponses: 5
    Dernier message: 26/06/2006, 15h04

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