2010-01-15 6 views
1

La création dynamique d'un widget GTK + à partir du code permet un accès direct aux widgets enfants directement.Accès au widget dans GTK +

Maintenant, comment puis-je accéder aux widgets enfants lors de la création d'une boîte de dialogue GTK + (par exemple) à partir d'un fichier .glade?

class ConfigDialog(object): 
    def __init__(self, glade_file, testing=False): 
     self.testing=testing 
     builder = gtk.Builder() 
     builder.add_from_file(glade_file) 
     self.dialog = builder.get_object("config_dialog") 
     self.dialog._testing=testing 
     self.dialog._builder=builder 

J'ai bricoler un peu avec .get_internal_child sans succès. Q: disons que je veux accéder au widget nommé "name_entry", comment je m'y prendrais?

Répondre

7

vous font déjà l'appel

self.dialog = builder.get_object("config_dialog") 

Vous devez également être en mesure de faire

self.nameEntry = builder.get_object("name_entry") 

Ceci est au moins comment fonctionne python-Glade et je suppose que GtkBuilder est le même.

+0

Marvelous! Cela a fait l'affaire! Je ne peux pas "voter" pour le moment ... Je n'ai pas de "votes" pour aujourd'hui ... quota atteint. Je ferai ça demain. – jldupont

+0

Pourquoi avez-vous mis votre réponse en tant que wiki communautaire? Ne peut pas gagner la réputation de cette façon ... – jldupont

+0

@juldupont: Probablement parce que Ed a senti comme ça. –

4

En outre, si vous souhaitez rechercher un widget nommé et l'instance Builder n'est pas disponible, vous pouvez essayer d'utiliser la fonction d'utilité suivante:

def get_child_by_name(parent, name): 
    """ 
    Iterate through a gtk container, `parent`, 
    and return the widget with the name `name`. 
    """ 
    def iterate_children(widget, name): 
     if widget.get_name() == name: 
      return widget 
     try: 
      for w in widget.get_children(): 
       result = iterate_children(w, name) 
       if result is not None: 
        return result 
       else: 
        continue 
     except AttributeError: 
      pass 
    return iterate_children(parent, name)