2010-04-19 5 views
14

Ich habe in Glade 3.6.7 ein einfaches Fenster-GUI erstellt und versuche es in Python zu importieren. Jedes Mal, wenn ich versuche ich, dies zu tun, erhalten die folgende Fehlermeldung:Python Glade konnte kein GladeXML-Objekt erstellen

(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 

Mein Python-Code:

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

Und die foo.glade Datei:

<?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">&#x25CF;</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">&lt;b&gt;Source&lt;/b&gt;</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">&#x25CF;</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">&lt;b&gt;Results&lt;/b&gt;</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 und die über Python-Skript sind im selben Verzeichnis, und ich habe versucht, einen voll qualifizierten Pfad zu verwenden, aber immer noch den gleichen Fehler (ich bin mir sicher, dass der Pfad korrekt ist!).

Irgendwelche Ideen?

Cheers,

Pete

+0

wie gladefile genau aussieht? Ist es ein absoluter Pfad? Sind Sie sicher, dass Ihr Programm darauf zugreifen kann? – joaquin

+0

Ich habe einen absoluten Pfad ausprobiert und einfach "foo.glade" und das selbe ist passiert. Es sollte kein anderes Problem beim Zugriff auf die Datei geben, es hat keine speziellen Dateieinschränkungen und ich habe es seit dem Drücken der Speicherschaltfläche in Glade nicht mehr berührt. – Peter

Antwort

23

Sie haben eine GtkBuilder Datei statt Glade-Datei erstellt.

können Sie GtkBuilder wie folgt verwendet werden:

builder = gtk.Builder() 
builder.add_from_string(string, len(string)) 
builder.connect_signals(anobject) 
builder.get_object(name) 

EDIT:

Wenn Sie ein neues Projekt in Lichtung starten Sie gefragt, ob Sie eine Glade-Datei oder eine GtkBuilder Datei erstellen möchten, die ist neu und flexibler. Versuchen Sie, die Builder-Datei mit dem folgenden Code:

#!/usr/bin/env python 

import gtk 

class QueryRelevanceEvaluationApp: 

    def __init__(self): 
     filename = "foo.glade" 
     builder = gtk.Builder() 
     builder.add_from_file(filename) 
     builder.connect_signals(self) 

    def on_buttonGenerate_clicked(self, widget): 
     print "You clicked the button" 

app = QueryRelevanceEvaluationApp() 
gtk.main() 

EDIT2:

Beachten Sie, dass ich keine Handler in Ihrer GtkBuilder Datei

+1

Was müsste ich erstellen, um den obigen Code zu verwenden und wie wird dies mit Glade erreicht? (Nur der Vollständigkeit halber) :) – Peter

+1

Peter: GtkBuilder ist die bevorzugte Methode, mit libglade ist veraltet, so, nicht. :-) –

+0

Nützliches Code-Snippet, aber es hat einen wichtigen Schritt verpasst: builder.get_object ("windowRelevementEvaluation"). Show_all() –

5

sehen hatte ich das gleiche Problem Pete erwähnt. Nach der Antwort, die mg gegeben hat, habe ich die .glade-Datei im liblgade-Format anstelle von GTKBuilder gespeichert. Im Dialogfeld "Speichern unter ..." haben Sie unten die Option "Dateiformat", klicken Sie auf "liblglade" und voila !!!!

+0

Hm ... Es hat nicht die Dateiformatoption: / –

Verwandte Themen