poniendo la interfaz glade en python

He hecho un gui en claro que quiero poner en un progtwig de python. Estaba adaptando las instrucciones de un tutorial que encontré en línea para cargar en mi archivo glade (http://www.pygtk.org/articles/pygtk-glade-gui/Creating_a_GUI_using_PyGTK_and_Glade.htm). Cuando tuve problemas, intenté que algo básico (un botón) lo llamara lo mismo que en ese tutorial, copie y pegara su código, y aún así no funcionó. También eché un vistazo a (http://www.linuxjournal.com/article/6586?page=0,2), que tiene una función que se llama de forma ligeramente diferente (“self.wTree = gtk.glade.XML (gladefile, windowname) “en lugar de sin windowname), e implementó un equivalente con el mío y eso no lo solucionó. Definitivamente tengo Pygtk trabajando, hice algo sin usar Glade antes y funcionó bien. El error que estoy recibiendo es:

/usr/share/themes/NOX/gtk-2.0/gtkrc:233: Murrine configuration option "gradients" is no longer supported and will be ignored. (helloWorld.py:9804): libglade-WARNING **: Expected . Got . (helloWorld.py:9804): libglade-WARNING **: did not finish in PARSER_FINISH state Traceback (most recent call last): File "helloWorld.py", line 31, in  hwg = HellowWorldGTK() File "helloWorld.py", line 22, in __init__ self.wTree = gtk.glade.XML(self.gladefile) RuntimeError: could not create GladeXML object 

Estoy ejecutando xubuntu 11.04. La configuración de Murrine surge cuando se abre cualquier aplicación gtk, pero la incluí en caso de que sea relevante. Aquí está el código que tomé del tutorial (pero no funciona)

 #!/usr/bin/env python import sys try: import pygtk pygtk.require("2.0") except: pass try: import gtk import gtk.glade except: sys.exit(1) class HellowWorldGTK: """This is an Hello World GTK application""" def __init__(self): #Set the Glade file self.gladefile = "PyHelloWorld.glade" self.wTree = gtk.glade.XML(self.gladefile) #Get the Main Window, and connect the "destroy" event self.window = self.wTree.get_widget("MainWindow") self.window.show() if (self.window): self.window.connect("destroy", gtk.main_quit) if __name__ == "__main__": hwg = HellowWorldGTK() gtk.main() 

Intenta con este código:

 #!/usr/bin/env python # -*- coding: utf-8 -*- import pygtk pygtk.require("2.0") import gtk import gtk.glade class HellowWorldGTK: def __init__(self): self.gladefile = "helloworld.glade" self.glade = gtk.Builder() self.glade.add_from_file(self.gladefile) self.glade.connect_signals(self) self.glade.get_object("MainWindow").show_all() def on_MainWindow_delete_event(self, widget, event): gtk.main_quit() if __name__ == "__main__": try: a = HellowWorldGTK() gtk.main() except KeyboardInterrupt: pass 

Recuerde: en Glade, edite las “Preferencias” del archivo a ” GTKBuilder ” (no “libglade”)

Su PyHelloWorld.glade es incorrecto. Asegúrese de haberlo creado con la aplicación Glade correcta, hay aplicaciones Glade2 y Glade3 que se pueden instalar y usar. Si descargaste el archivo, asegúrate de que sea correcto. El mensaje de error lo dice todo:

 Expected . Got  

Así que el archivo XML tiene la etiqueta de interfaz, pero la biblioteca PyGTK espera la etiqueta glade-interface.

Como siempre tengo problemas con esto, aquí hay un código de Python 2.7 que uso para uno u otro:

para Libglade :

 # needs libglade (not for gtk-builder) import pygtk pygtk.require("2.0") import gtk import gtk.glade gladefile = "test-libglade.glade" wTree = gtk.glade.XML(gladefile) window = wTree.get_widget("MainWindow") if (window): window.connect("destroy", gtk.main_quit) window.show_all() # must have! gtk.main() 

Para GtkBuilder :

 # needs gtk-builder (not for libglade) import pygtk pygtk.require("2.0") import gtk gladefile = "test-gtkbuilder.glade" wTree = gtk.Builder() wTree.add_from_file(gladefile) window = wTree.get_object("MainWindow") if (window): window.connect("destroy", gtk.main_quit) window.show_all() # must have! gtk.main() 

En Glade, solo puede agregar una ventana, llamarla MainWindow y guardar dos versiones con los nombres de archivo respectivos como se muestra arriba para cada formato; y estos fragmentos de código deberían trabajar con ellos de forma respectiva.

Espero que esto ayude a alguien,
¡Aclamaciones!

Esto funciona perfectamente.

 #!/usr/bin/python import pygtk pygtk.require("2.0") import gtk import gtk.glade class SubinsWindow: def __init__(self): self.gladefile = "game.glade" self.glade = gtk.Builder() self.glade.add_from_file(self.gladefile) self.glade.connect_signals(self) self.win=self.glade.get_object("window1") # Window Name in GLADE self.win.show_all() if __name__ == "__main__": a = SubinsWindow() gtk.main() 

Si está utilizando GTK + 3 en python, consulte el constructor .

 import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class Handler: def onDestroy(self, *args): Gtk.main_quit() def onButtonPressed(self, button): print("Hello World!") builder = Gtk.Builder() builder.add_from_file("builder_example.glade") builder.connect_signals(Handler()) window = builder.get_object("window1") window.show_all() Gtk.main()