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

GTK+ avec Python Discussion :

GTK sur plusieurs fichier sources.


Sujet :

GTK+ avec Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Par défaut GTK sur plusieurs fichier sources.
    Bonjour, conscient que ma question va en faire rire plus d'un !! :-) ...

    Donc voila.

    je travail avec le couple Glade GTK.

    Dans le cadre d'un projet j'aurai besoin de travailler par exemple sur les fichier suivant :

    lang.glade = Le fichier XML glade
    Interface.py = l'import du fichier glade et les définition des Events
    Commun.py = divers fonction

    Comment je peut faire pour par exemple changer le label d'un bouton depuis une classe dans le fichier commun.py

    En gros je met quoi a la place des trois petit point rouge dans le fichier commun.py dans l'exemple si dessous .
    Ne vous attacher pas trop a la forme je ne sait même pas si mon ex.: est pleinement fonctionnel.

    Pour ce qui est de la partie glade dans le fichier Interface ... ça fonctionne sans problème.

    Merci pour vos solution, vos conseil, n'hésitez pas a remettre les base en place lol :-) ...

    P.S: Je crois que j'ai un peut tout essayer je deviens fous lol :-) ...

    Au plaisir de vous relire.
    @RCR

    je vous met un exemple de code :
    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
    30
    31
    32
    33
     
    #Fichier Interface.py#
    import pygtk
    pygtk.require("2.0")
    import gtk
    import gtk.glade
    import Commun
     
    class monprogramme:
        def __init__(self):
            self.widgets = gtk.glade.XML('lang.glade',"window1")
            self.autoConnect()
     
        def __getitem__(self, key):
            return self.widgets.get_widget(key)
     
        def autoConnect(self):
            eventHandlers = {}
            for (itemName,value) in self.__class__.__dict__.items(): 
                if callable(value) and itemName.startswith('gtk_'):  
                    eventHandlers[itemName[4:]] = getattr(self,itemName) 
            self.widgets.signal_autoconnect(eventHandlers)
     
        def gtk_delete(self, source=None, event=None):
            gtk.main_quit()
     
        def gtk_on_Play_clicked(self, source=None, event=None):
            test.Fnc_Commun().change_label()
            return True
     
    #if __name__ == '__main__':
        app = monprogramme()
        gtk.main()
    ----------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #Fichier Commun.py
    from interface import *
     
    class Fnc_Commun() :
     
        def change_label(self):
            '...'.set_label('GENIAL')

  2. #2
    Membre chevronné
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Par défaut
    Salut et bienvenue !

    D'abord une remarque générale : les deux fichiers s'importent mutuellement, ce qui n'est pas top au niveau de la clarté. Là par exemple, je ne vois pas lequel des fichiers il faut exécuter pour lancer le prog...

    Tu devrais faire un fichier maître qui importe Interface et Commun, et passer directement les instances de classe comme arguments des constructeurs pour partages les données (en résumé : n'hésite pas à utiliser toute la puissance de la POO).


    Concernant le code, je ferais plutôt quelque chose de ce genre :

    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
     
    #Fichier Interface.py
    import pygtk
    pygtk.require("2.0")
    import gtk
    import gtk.glade
     
    class Monprogramme:
        def __init__(self):
            self.widgets = gtk.glade.XML('lang.glade',"window1")
            self.widgets.signal_autoconnect(self)
     
        def set_fncc(self, fnccommun):
            self.fncc = fnccommun
     
        def delete(self, source=None, event=None):
            gtk.main_quit()
     
        def on_Play_clicked(self, source=None, event=None):
            self.fncc.change_label()
            return True
     
        def __getitem__(self, key):
            return self.widgets.get_widget(key)
     
        def main_loop(self):
            gtk.main()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #Fichier Commun.py
     
    class Fnc_Commun() :
        def __init__(self, app):
            self.monprog = app
            self.monprog.set_fncc(self)
     
        def change_label(self):
            self.monprog["nom_du_widget"].set_label('GENIAL')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    # Fichier maître (lance le programme)
    import Interface
    import Commun
     
    app = Interface.Monprogramme()
    fc = Commun.Fnc_Commun(app)
    app.main_loop()

    Évidemment, dans cet exemple, le fait d'utiliser une classe juste pour une fonction "change_label" complique pas mal les choses. On pourrait faire plus simplement :
    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
     
    #Fichier Interface.py (lance le programme)
    import pygtk
    pygtk.require("2.0")
    import gtk
    import gtk.glade
    import Commun
     
    class Monprogramme:
        def __init__(self):
            self.widgets = gtk.glade.XML('lang.glade',"window1")
            self.widgets.signal_autoconnect(self)
     
        def delete(self, source=None, event=None):
            gtk.main_quit()
     
        def on_Play_clicked(self, source=None, event=None):
            Commun.change_label(source)
            return True
     
        def __getitem__(self, key):
            return self.widgets.get_widget(key)
     
        def main_loop(self):
            gtk.main()
     
    if __name__ == '__main__':
        Monprogramme().main_loop()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #Fichier Commun.py
     
    def change_label(self, src):
        src.set_label('GENIAL')

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Par défaut Merci
    La classe ... je ne m'attendait pas à autant de réactivité (Et on me demande pourquoi j'ai passer toutes mes machine sous ubuntu ?!! ... non non ... le libre n'a aucun avenir !!! lol)

    Merci pour cet explication et ces exemples ... je vais voir ça a fond.

    Effectivement ... j'ai encors quelques base a voir avec la POO mais avec les exemples que tu m'a donner c'est bien plus évident (Surtout le 2 eme qui saute au yeux quand on le sait :-) ) ...

    A+ pour de nouvelles aventure et merci a toi et a tout ceux qui font avancer le schmilblic !!! :-) ...

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

Discussions similaires

  1. Find and replace sur plusieur fichiers
    Par dazhoid dans le forum MATLAB
    Réponses: 1
    Dernier message: 30/08/2006, 16h18
  2. Macros sur Plusieurs fichiers Excel
    Par Echizen1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/06/2006, 11h21
  3. Sed sur plusieurs fichiers
    Par gangsoleil dans le forum Linux
    Réponses: 4
    Dernier message: 21/02/2006, 11h55
  4. #define sur plusieurs fichiers
    Par [thebadskull] dans le forum C
    Réponses: 5
    Dernier message: 14/10/2005, 20h52
  5. Réponses: 4
    Dernier message: 03/12/2004, 11h18

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