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 :

Remplacer un widget dans une table


Sujet :

GTK+ avec Python

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2003
    Messages : 48
    Par défaut Remplacer un widget dans une table
    Bonjour,

    J'aimerai remplacer un widget de type gtk.Button par un autre du type gtk.Image au sein d'une table. Je pense avoir trouver la manière de procéder mais le résultat est vraiment aléatoire ... Le gtk.Image ne s'affiche forcément....

    Voici le fichier glade et le programme ci-dessous

    Pour info, gazpacho est nécessaire pour faire fonctionner ce programme

    Le programme est simple, quand vous cliquez sur l'un des trois boutons (button5, button6, button7), le bouton est supprimé et une image doit apparaitre .....

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    # -*- coding: utf-8 -*-
    import pygtk
    pygtk.require('2.0')
    import gtk
    from gazpacho.loader.loader import ObjectBuilder
     
    class Window:
        def __init__(self):
            self.wt = ObjectBuilder('test-table.glade')
            self.window = self.wt.get_widget('window')
            signals = {"on_button_close_clicked" : self.on_button_close_clicked,
                       "on_button5_clicked" : self.on_button5_clicked,
                       "on_button6_clicked" : self.on_button6_clicked,
                       "on_button7_clicked" : self.on_button7_clicked}
            self.wt.signal_autoconnect(signals)
     
        def on_button5_clicked(self, widget):
            self.test("button5")
     
        def on_button6_clicked(self, widget):
            self.test("button6")
     
        def on_button7_clicked(self, widget):
            self.test("button7")
     
        def on_button_close_clicked(self, widget):
            gtk.main_quit()
     
        def test(self, str):
            table = self.wt.get_widget('table1')
            children = table.get_children()
            # img va remplacer le bouton
            img = gtk.Image()
            img.set_from_stock(gtk.STOCK_YES,5)
            cpt=0
            for child in children:
                if isinstance(child, gtk.Button) and child.get_label() == str:
                    table.remove(child)
                    table.attach(img,1,2,cpt,cpt+1)
                cpt+=1
                self.window.show_all()
     
    if __name__ == "__main__":
        win = Window()
        win.window.show()
        gtk.main()
    Je n'arrive pas à comprendre le caractère aléatoire du problème.

    Une idée ?

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    A la fin de la fonction test, plutôt que de faire un show_all je me contenterais de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        def test(self, str):
            table = self.wt.get_widget('table1')
            children = table.get_children()
            # img va remplacer le bouton
            img = gtk.Image()
            img.set_from_stock(gtk.STOCK_YES,5)
            cpt=0
            for child in children:
                if isinstance(child, gtk.Button) and child.get_label() == str:
                    table.remove(child)
                    table.attach(img,1,2,cpt,cpt+1)
                cpt+=1
            img.show()

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2003
    Messages : 48
    Par défaut
    Merci gege2061 pour ton aide. J'ai procédé à la modification mais pas de changement.

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par sluke Voir le message
    J'ai procédé à la modification mais pas de changement.
    Tu as des messages d'erreur dans la console ? Sinon le problème survient lors du premier clique sur un bouton ou lors d'un second clic ?

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2003
    Messages : 48
    Par défaut
    En fait, je n'ai pas de message d'erreur dans la console.
    Une autre précision, lorsque je clique sur un bouton, celui-ci est supprimé (donc la suppression fonctionne).
    Je constate que le résultat dépend de la combinaison de "clic" effectué. Je m'explique :
    - je clique sur button5 (pas d'image de remplacement), puis button6 (pas d'image) enfin button7 (là l'image apparait à la place du button7)
    autres essais :
    - je clique sur button7 (pas d'image de remplacement), puis button6 (l'image s'affiche) enfin button5 (là extraordinaire : toutes les images sont là !)
    - je clique sur button6 (l'image s'affiche), puis button7 (pas d'image) enfin button5 (l'image du button7 s'affiche)

    Je me suis arrêter là mais on voit bien que quelque chose cloche ... Si je relance le programme avec les mêmes combinaisons, le résultat est le même que celui décrit ci-dessus.

Discussions similaires

  1. [AC-2007] Remplacement de caractères dans une table complète
    Par Viggen0020 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/08/2009, 15h49
  2. Réponses: 11
    Dernier message: 11/11/2008, 18h38
  3. Remplacer des caractères dans une table
    Par cycy50 dans le forum Modélisation
    Réponses: 11
    Dernier message: 19/10/2007, 15h02
  4. Réponses: 2
    Dernier message: 08/08/2007, 15h32
  5. Positionner un WidGet dans une table
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 05/11/2005, 19h22

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