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 :

Appel d'une fonction depuis une classe fille


Sujet :

Python

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Par défaut Appel d'une fonction depuis une classe fille
    Bonjour,
    Je dévelppe une application en python 3 (3.12) et pour l'interface graphique j'utilise PyQt6.
    J'ai une classe type dynamique, ou j'ai programmé les actions sur tous les éléments de mon interface.
    J'ai des boutons qui me permettent de lancer la communication avec des équipements: j'instancie une variable, puis j'appelle ses fonctions quand j'en ai besoin.
    Ces équipements sont biensur gérér dans des classes. mais j'aimerai que les classes de mes équipements puissent appelé une function de ma classe dynamique.
    Exemple:
    Classe Dynamique : MonIhm
    Classe Equipement : Roue
    Dans MonIhm, j'ai une fonction qui s'appelle "FillLogbook", qui me permet d'afficher le logbook des activités, et j'ai une fonction que je connect à ma bouton.
    Dans cette fonction, j'instancie une variable (exemple self.roue = ClassRoue), puis je lance la connexion (self.roue.connect) et l'initialisation de ma roue (self.roue.init).
    J'aimerai que dans la fonction appelé permettant la connection (Class roue, fonction Connect), je puisse utiliser mon interface graphique pour mettre à jour le logbook pour communiquer à l'opérateur l'avancement de ma connexion.
    J'ai un QTableWidget qui me permet d'afficher le logbook des activités. (col1 Data et Heure, Col2 Message, Col3 status...)
    Pendant la connexion a la roue : j'ai besoin d'informer l'opérateur de l'avancement de la connexion.
    Auriez vous des idées?
    Merci
    Julien

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par astragoth Voir le message
    Auriez vous des idées?
    Vous utilisez un vocabulaire technique qui est trop imprécis pour illustrer ce que vous voulez faire: c'est quoi une classe dynamique? Une classe fille? dans une classe, on définit des méthodes (pas des fonctions(*)), on va faire communiquer des instances de classe (pas les classes elle mêmes,)...

    Pour le reste, vous utilisez Qt donc vous avez la possibilité de relier vos QObjects via signals et slots. Ce qui est généralement suffisant (si votre code a été construit pour en profiter).

    (*) une fonction est (en général) un objet global d'un module, aucun soucis pour l'appeler depuis n'importe quelle classe/instance du même module.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 322
    Par défaut
    re
    j'ai déjà évoqué ce qu'utilisait ce framework "évènementiel" dans ta précédente demande.
    Pour bien utiliser QT, il faut au moins bien comprendre le principe (tu réponds bien à un clic sur un bouton pourtant ? il n'y a rien de magique, c'est la base de la communication avec ce framework). La seule chose à savoir (en plus) c'est que tu peux créer tes propres événements/signaux en fonction de tes propre besoin (roue_tourne, stoppe, à_gauche, a_droite , ...).

    Ma seule idée, malheureusement, c'est de lire un minimum de documentation, sinon c'est le mur assuré pour ton besoin.
    $moi= (:nono: !== :oops:) ? :king: : :triste: ;

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par astragoth Voir le message
    Auriez vous des idées?
    Apprendre à utiliser Qt en regardant le code de quelques exemples...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 322
    Par défaut
    Citation Envoyé par Sve@r
    Emettons notre signal
    pour transmettre une information entre différents widgets.
    A noter : Avec QT, ce n'est pas obligatoirement entre widgets

    Il suffit d'avoir un/des QObject :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class MesDatas(QObject):
        error = Signal(str, str)
        dataChanged = Signal(int, int)
     
        def set(self, index: int, value):
            if isinstance(value, int) and value < 0:
                self.error.emit("Règle métier", "Valeur ne peut être négative")
                return
            try:
                self.data[index] = value
                self.dataChanged.emit(index, value)
            except Exception as err:
                self.error.emit("erreur système", str(err))
        ...
    $moi= (:nono: !== :oops:) ? :king: : :triste: ;

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Hello,

    Citation Envoyé par astragoth
    j'ai besoin d'informer l'opérateur de l'avancement de la connexion.
    Dans un concept orienté objets, le design pattern le plus approprié pour informer l'opérateur de l'avancement de la connexion est le pattern Observateur (Observer).

    Comme dis précédemment, PyQt6 intègre une version du pattern Observateur : les signaux et slots.


    1. Votre ClassRoue (et toute autre classe d'équipement) deviendra un émetteur de signaux. Pour cela, elle doit hériter de QObject.
    2. Votre classe MonIhm contient la méthode FillLogbook. Cette méthode, ou une méthode dédiée à la réception des messages de log, agira comme un "slot".
    3. Dans MonIhm, lorsque vous instanciez self.roue = ClassRoue(), vous allez connecter le signal émis par self.roue à la méthode (slot) de MonIhm qui doit réagir.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Par défaut
    Bonjour à tous,
    Merci pour vos réponses.
    en utilisant SIGNAL, j'arrive à faire de ce que je veux


    Class Main(QtCore.QObject):
    def __init__(self):
    self.VarClassObjet.SignalEmitObjet.connect(self.FunctionDansMain)

    def FunctionDansMain(self, var1, var2, var3):
    #action...

    Class Objet(QtCore.QObject)
    SignalEmitObjet = QtCore.Signal(str, str, str)
    def __init__(self):
    super().__init__()

    def Function(self):
    self.SignalEmitObjet.emit('Text1', "Text2", "Text3")

Discussions similaires

  1. [Doxygen]Commenter une fonction héritée depuis la classe fille
    Par khazna dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 31/01/2009, 14h20
  2. appel d'une classe dans une fonction
    Par fraisa1985 dans le forum Général Java
    Réponses: 7
    Dernier message: 27/03/2008, 12h11
  3. [downcasting] fonction d'une classe fille
    Par poukill dans le forum C++
    Réponses: 7
    Dernier message: 28/07/2006, 16h26
  4. Appel de fonction depuis une classe fille
    Par lhpp dans le forum Interfaces Graphiques en Java
    Réponses: 8
    Dernier message: 26/04/2006, 22h02
  5. [debutant]appeller une fonction d'une classe fille et mere ?
    Par Battosaiii dans le forum Débuter
    Réponses: 1
    Dernier message: 12/11/2005, 12h56

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