2011-09-04 50 views
9

我已经制作了一个gui,我想放在python程序中。我正在修改我在网上找到的教程中的说明,以加载我的glade文件(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)“,而不是没有windowname),并实施了与我的等价物,但没有解决它。我绝对有pygtk工作,我做了一些没有使用glade之前,它工作正常。我得到的错误是:在python中放置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应用程序打开时,Murrine配置就会出现,但我将它包括在内以防相关。这里是我从教程中获取的代码(但不工作)

#!/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/在这篇文章中,你将能够得到代码示例,这篇文章是用葡萄牙语。 – 2012-02-23 14:00:02

回答

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 

记住: 在格拉德,编辑文件的 “偏好”, “GTKBuilder”(而不是 “libglade的”)

+0

谢谢,这就是我最终做的(已经,但它会对其他人的参考:) :)。 – Harpy

4

您的PyHelloWorld.glade不正确。确保使用正确的Glade应用程序创建它,并且可以安装和使用Glade2和Glade3应用程序。如果您下载了该文件,请确保它是正确的。该错误消息说,这一切:

Expected <glade-interface>. Got <interface> 

所以XML文件具有界面标签,但PyGTK的图书馆预计空地界面标签。

+0

谢谢,它现在工作:)。 – Harpy

1

因为我总是最终遇到问题,下面是一个Python 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() 

格莱德,你可以再补充一个窗口,把它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()