2009-04-14 7 views
5

J'ai un petit projet qui utilise libglade et utiliser ce qui suit pour charger le fichier xml:Quelles sont les étapes à suivre pour convertir libglade en GtkBuilder? (Python)

self.gladefile = "sdm.glade" 
self.wTree = gtk.glade.XML(self.gladefile) 
self.window = self.wTree.get_widget("MainWindow") 
if (self.window): 
    self.window.connect("destroy", gtk.main_quit) 
dic = { "on_button1_clicked" : self.button1_clicked, 
     "on_MainWindow_destroy" : gtk.main_quit} 
self.wTree.signal_autoconnect(dic) 

Après la conversion de mon projet en Glade, quels changements structurels dois-je faire? Je suis sur Ubuntu 9.04.

Répondre

11

Vous devez utiliser gtk.Builder à la place. Cette classe peut charger un nombre illimité de fichiers UI, donc vous devez les ajouter manuellement, soit sous forme de fichiers ou sous forme de chaînes:

self.uifile = "sdm.ui" 
self.wTree = gtk.Builder() 
self.wTree.add_from_file(self.uifile) 

Au lieu de get_widget, il suffit d'utiliser get_object sur la classe constructeur:

self.window = self.wTree.get_object("MainWindow") 
if self.window: 
    self.window.connect("destroy", gtk.main_quit) 

pour connecter les signaux, il suffit d'utiliser connect_signals, qui prend également un dictionnaire:

dic = { "on_button1_clicked" : self.button1_clicked, 
    "on_MainWindow_destroy" : gtk.main_quit} 
self.wTree.connect_signals(dic) 

Il fut le cas (au moins en GTK + 2.12, pas sûr si je t est toujours le même) que vous pourriez appeler connect_signals qu'une seule fois, tous les signaux qui ne sont pas connectés lors de la première invocation ne seront jamais connectés. C'était différent dans la clairière, alors faites attention si vous avez déjà utilisé cette fonction auparavant.

5

réponse de Torsten est correct, mais un peu incomplète, donc dans l'esprit de http://xkcd.com/979/ voici la procédure que je récemment installé sur après beaucoup d'essais et d'erreurs:

yada.glade Open in concepteur d'interface Glade. Allez dans edit-> project et changez le type de projet en GtkBuilder et assurez-vous qu'il cible la dernière version (2.24 à ce jour). Enregistrez le fichier, en étant sûr qu'il enregistre au format GtkBuilder, et changer le nom de yada.glade à yada.ui

yada.py Ouvrir et modifier le code suivant:

gladefile = relativize_filename(os.path.join("glade", "yada.glade")) 
self.wTree = gtk.glade.XML(gladefile, self.windowname) 

à:

uifile = relativize_filename(os.path.join("glade", "yada.ui")) 
self.wTree = gtk.Builder() 
self.wTree.add_from_file(uifile) 

changer de même toutes les instances de self.wTree.get_widget(...) à self.wTree.get_object(...)

Changement self.wTree.signal_autoconnect(dic)-self.wTree.connect_signals(dic) 012 Si votre code dépend du nom attribué au widget dans le concepteur d'interface, remplacez widget.get_name() par gtk.Buildable.get_name(widget). widget.get_name() renvoie maintenant juste le type de widget. EDIT: Vous devez également modifier widget.set_name('my_widget') à gtk.Buildable.set_name(widget, 'my_widget').

Supprimer import gtk.glade

J'ai trouvé de nombreux signaux inutilisés définis dans le fichier xml yada.ui, je devais ouvrir le fichier xml et les supprimer manuellement pour éliminer les avertissements qu'ils ont causés.

Questions connexes