2010-04-19 15 views
14

नहीं बना सका मैंने ग्लेड 3.6.7 में एक साधारण विंडो जीयूआई बनाई है और मैं इसे पायथन में आयात करने की कोशिश कर रहा हूं। हर बार जब मैं कोशिश ऐसा करने के लिए मैं निम्न त्रुटि:पायथन ग्लाइड ग्लैडएक्सएमएल ऑब्जेक्ट

(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 

मेरे अजगर कोड:

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

और 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 और पाइथन लिपि के ऊपर एक ही निर्देशिका में हैं, और मैंने पूरी तरह योग्यता प्राप्त पथ का उपयोग करने का प्रयास किया है लेकिन फिर भी वही त्रुटि मिलती है (मुझे यकीन है कि पथ सही है!)।

कोई विचार?

चीयर्स,

पीट

+0

कैसे gladefile बिल्कुल दिखता है? क्या यह एक पूर्ण पथ है? क्या आप सुनिश्चित हैं कि आपका प्रोग्राम इसका उपयोग कर सके? – joaquin

+0

मैंने एक पूर्ण पथ और सिर्फ "foo.glade" की कोशिश की है और वही हुआ। फ़ाइल तक पहुंचने में कोई अन्य समस्या नहीं होनी चाहिए, इसके पास कोई विशेष फ़ाइल प्रतिबंध नहीं है और मैंने ग्लैड में सेव बटन को मारने के बाद इसे छुआ नहीं है। – Peter

उत्तर

23

आप Glade फ़ाइल के बजाय एक GtkBuilder फ़ाइल बनाया है।

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

संपादित:

आप इस प्रकार GtkBuilder उपयोग कर सकते हैं

जब आप Glade में एक नई परियोजना शुरू यह आपसे पूछता है कि आप एक Glade फ़ाइल या एक GtkBuilder फ़ाइल, बनाने चाहते हैं जो नया और अधिक लचीला है। निम्न कोड के साथ बिल्डर फ़ाइल का प्रयास करें:

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

खबरदार है कि मैं अपने GtkBuilder फ़ाइल

+1

ऊपर दिए गए कोड का उपयोग करने के लिए मुझे क्या बनाना होगा और यह ग्लैड का उपयोग करके कैसे प्राप्त किया जा सकता है? (बस पूर्णता के लिए) :) – Peter

+1

पीटर: जीटीकेबिल्डर पसंदीदा तरीका है, libglade का उपयोग कर बहिष्कृत किया गया है, इसलिए, नहीं। :-) –

+0

उपयोगी कोड स्निपेट, लेकिन यह एक महत्वपूर्ण कदम से चूक गया: builder.get_object ("windowRelevanceEvaluation")। Show_all() –

5

में कोई हैंडलर नहीं देख सकते हैं मैं एक ही समस्या पीट उल्लेख किया था। एमजी ने दिए गए उत्तर के बाद, मैंने जीटीकेबिल्डर के बजाय liblgade प्रारूप में .glade फ़ाइल को सहेजने के लिए क्या किया है। के रूप में सहेजें .. संवाद बॉक्स पर, नीचे आपके पास "फ़ाइल प्रारूप" विकल्प "liblglade" और voila पर क्लिक करें !!!!

+0

एचएम ... इसमें फ़ाइल प्रारूप विकल्प नहीं है: / –

संबंधित मुद्दे