2011-09-04 10 views
9

में ग्लैड इंटरफ़ेस डालने मैंने ग्लेड में एक गुई बनाया है जिसे मैं एक अजगर कार्यक्रम में रखना चाहता हूं। मैं अपने ग्लैड फ़ाइल (http://www.pygtk.org/articles/pygtk-glade-gui/Creating_a_GUI_using_PyGTK_and_Glade.htm) में लोड होने के लिए ऑनलाइन मिले एक ट्यूटोरियल से निर्देशों का अनुकूलन कर रहा था। जब मुझे समस्याएं थीं तो मैंने कुछ बुनियादी (एक बटन) को उसी ट्यूटोरियल में कॉल करने की कोशिश की, और उनके कोड को चिपकाने की प्रतिलिपि बनाई, और यह अभी भी काम नहीं कर सका। मैंने (http://www.linuxjournal.com/article/6586?page=0,2) पर भी एक नज़र डाली, जिसमें एक फ़ंक्शन को थोड़ा अलग कहा जाता है ("self.wTree = gtk.glade.XML (gladefile, windowname) "बिना हवाओं के बिना), और मेरे साथ समकक्ष लागू किया और यह ठीक नहीं किया। मैं निश्चित रूप से काम कर रहा है, मैंने पहले glade का उपयोग किए बिना कुछ बनाया और यह ठीक काम किया। मुझे जो त्रुटि मिल रही है वह है:पायथन

/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 

मैं xubuntu 11.04 चला रहा हूं। जब भी कोई gtk एप्लिकेशन खुलता है तो मुर्रिन कॉन्फ़िगरेशन चीज तब आती है, लेकिन अगर यह प्रासंगिक है तो मैंने इसे शामिल किया है। यहां ट्यूटोरियल से लिया गया कोड है (लेकिन काम नहीं कर रहा है)

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

यह आपके सवाल का जवाब: http://stackoverflow.com/questions/2668618/python-glade-could-not-create-gladexml-object – dumbmatter

+0

धन्यवाद :)। यह अब काम करता है। – Harpy

+0

इस लिंक में एक नज़र डालें http://techaffairs.com.br/corrigindo-problema-libglade%E2%88%92warning-expected-glade%E2%88%92interface-got-interface/ इस पोस्ट में आप सक्षम होंगे कोड उदाहरण प्राप्त करने के लिए, यह पोस्ट पुर्तगाली में है। –

उत्तर

10

इस कोड के साथ प्रयास करें:

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

याद रखें:, Glade में संपादित करने के लिए फ़ाइल की "वरीयताएँ" "GTKBuilder" (नहीं "libglade")

+0

धन्यवाद, यही वह है जो मैंने किया (पहले से ही, लेकिन यह अन्य लोगों के संदर्भ के लिए अच्छा होगा) :)। – Harpy

4

आपका PyHelloWorld.glade गलत है। सुनिश्चित करें कि आपने इसे सही ग्लेड एप्लिकेशन के साथ बनाया है, वहां ग्लैड 2 और ग्लैड 3 एप्लिकेशन हैं जिन्हें इंस्टॉल और इस्तेमाल किया जा सकता है। अगर आपने फ़ाइल डाउनलोड की है तो सुनिश्चित करें कि यह सही है। त्रुटि संदेश यह कहते हैं सभी:

Expected <glade-interface>. Got <interface> 

तो एक्सएमएल फ़ाइल इंटरफ़ेस टैग है, लेकिन PyGTK पुस्तकालय Glade इंटरफ़ेस टैग की उम्मीद है।

+0

धन्यवाद, यह अब काम करता है :)। – Harpy

1

मैं के बाद से हमेशा इसके साथ समस्याएं खत्म हो जाती हैं, यहां एक पायथन 2.7 कोड है जिसका उपयोग मैं एक या दूसरे के लिए करता हूं:

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

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

Glade में, तुम सिर्फ एक विंडो में जोड़ सकते हैं, इसे कहते MainWindow, और प्रत्येक प्रारूप के लिए ऊपर के रूप में संबंधित फ़ाइल नामों के साथ दो संस्करणों को बचाने; और इन स्निपेट्स को उनके साथ दोबारा काम करना चाहिए।

उम्मीद है कि यह किसी की मदद करता है,
चीयर्स!

0

यह पूरी तरह से काम करता है।

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