Domanda

Ho creato una semplice finestra GUI in Glade 3.6.7 e sto cercando di importare in Python. Ogni volta che cerco di fare in modo da ottenere il seguente errore:

(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

Il mio Python Codice:

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

E il file 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">&#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 e lo script python sopra sono nella stessa directory, e ho provato ad utilizzare un percorso completo, ma ancora ottenere lo stesso errore (Sono certo che il percorso sia corretto!).

Tutte le idee?

Saluti,

Pete

È stato utile?

Soluzione

È stato creato un file GtkBuilder invece di file di Glade.

È possibile utilizzare GtkBuilder come segue:

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

Modifica :

Quando si avvia un nuovo progetto in radura che chiede se si desidera creare un file radura o un file di GtkBuilder, che è nuovo e più flessibile. Provare il file costruttore con il seguente codice:

#!/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:

Attenzione che non riesco a vedere alcun handler nel file GtkBuilder

Altri suggerimenti

Ho avuto lo stesso problema Pete menzionato. Dopo la risposta che ha dato mg, quello che ho fatto è quello di salvare il file in un formato .glade liblgade invece di GtkBuilder. Nella finestra di dialogo Salva con nome .., in fondo si ha l'opzione "File Format" cliccare su "liblglade" e voilà !!!!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top