He creado una GUI de ventana simple en Glade 3.6.7 y estoy tratando de importarla a Python. Cada vez que trato de hacer lo que me sale el siguiente error:Python Glade no pudo crear el objeto GladeXML
(queryrelevanceevaluation.py:8804): libglade-WARNING **: Expected <glade-interface>. Got <interface>.
(queryrelevanceevaluation.py:8804): libglade-WARNING **: did not finish in PARSER_FINISH state
Traceback (most recent call last):
File "queryrelevanceevaluation.py", line 17, in <module>
app = QueryRelevanceEvaluationApp()
File "queryrelevanceevaluation.py", line 10, in __init__
self.widgets = gtk.glade.XML(gladefile)
RuntimeError: could not create GladeXML object
Código Mi Python:
#!/usr/bin/env python
import gtk
import gtk.glade
class QueryRelevanceEvaluationApp:
def __init__(self):
gladefile = "foo.glade"
self.widgets = gtk.glade.XML(gladefile)
dic = {"on_buttonGenerate_clicked" : self.on_buttonGenerate_clicked}
self.widgets.signal_autoconnect(dic)
def on_buttonGenerate_clicked(self, widget):
print "You clicked the button"
app = QueryRelevanceEvaluationApp()
gtk.main()
y el archivo foo.glade:
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="windowRelevanceEvaluation">
<property name="visible">True</property>
<property name="title" translatable="yes">Query Result Relevance Evaluation</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkHBox" id="hbox2">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="labelQuery">
<property name="visible">True</property>
<property name="label" translatable="yes">Query:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="padding">4</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
</object>
<packing>
<property name="padding">4</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frameSource">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="left_padding">12</property>
<child>
<object class="GtkHButtonBox" id="hbuttonbox1">
<property name="visible">True</property>
<child>
<object class="GtkRadioButton" id="radiobuttonGoogle">
<property name="label" translatable="yes">Google</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="radiobuttonBing">
<property name="label" translatable="yes">Bing</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="radiobuttonBoden">
<property name="label" translatable="yes">Boden</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="radiobuttonCSV">
<property name="label" translatable="yes">CSV</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="labelFrameSource">
<property name="visible">True</property>
<property name="label" translatable="yes"><b>Source</b></property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<child>
<object class="GtkHBox" id="hbox3">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="labelResults">
<property name="visible">True</property>
<property name="label" translatable="yes">Number Results:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spinbuttonResults">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
</object>
<packing>
<property name="padding">4</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="labelFrameResults">
<property name="visible">True</property>
<property name="label" translatable="yes"><b>Results</b></property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="padding">2</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="buttonGenerateResults">
<property name="label" translatable="yes">Generate!</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
foo.glade y la encima de la secuencia de comandos de python están en el mismo directorio, y he intentado utilizar una ruta totalmente calificada, pero aún así obtener el mismo error (¡estoy seguro de que la ruta es correcta!).
¿Alguna idea?
Saludos,
Pete
¿Cómo se ve gladefile exactamente? ¿Es un camino absoluto? ¿Estás seguro de que tu programa puede acceder? – joaquin
He intentado un camino absoluto y simplemente "foo.glade" y sucedió lo mismo. No debe haber ningún otro problema al acceder al archivo, no tiene restricciones de archivos especiales y no lo he tocado desde que presioné el botón Guardar en Glade. – Peter