2011-09-04 10 views
9

He hecho una guia en glade que quiero poner en un programa 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é algo básico (un botón) llamándolo de la misma manera que en ese tutorial, y copié pegando 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 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 funcionando, hice algo sin usar glade antes y funcionó bien. El error que estoy recibiendo es:poniendo la interfaz glade en python

/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 <glade-interface>. Got  
<interface>. 

(helloWorld.py:9804): libglade-WARNING **: did not finish in PARSER_FINISH state 
Traceback (most recent call last): 
File "helloWorld.py", line 31, in <module> 
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 fuera relevante. Aquí está el código que tomé del tutorial (pero no está funcionando)

#!/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() 
+0

esto responda a su pregunta: http://stackoverflow.com/questions/2668618/python-glade-could-not-create-gladexml-object – dumbmatter

+0

Gracias :). Ahora funciona. – Harpy

+0

Eche un vistazo en este enlace http://techaffairs.com.br/corrigindo-problema-libglade%E2%88%92warning-expected-glade%E2%88%92interface-got-interface/ en este post usted podrá para obtener el ejemplo del código, esta publicación está en portugués. –

Respuesta

10

Pruebe 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, editar la opción "Preferencias" del archivo a "GtkBuilder" (no "libglade")

+0

Gracias, eso es lo que terminé haciendo (ya, pero será bueno para la referencia de otras personas) :). – Harpy

4

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

Expected <glade-interface>. Got <interface> 

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

+0

Gracias, funciona ahora :). – Harpy

1

Como yo siempre terminan teniendo problemas con esto, aquí hay un código de Python 2.7 que utilizo 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, basta con añadir una ventana, lo llaman MainWindow, y guardar dos versiones con los respectivos nombres de archivo que el anterior para cada formato; y estos fragmentos deberían funcionar con ellos de manera respectiva.

Espero que esto ayude a alguien,
¡Salud!

0

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() 
Cuestiones relacionadas