在python中使用glade接口

在python中使用glade接口,python,gtk,pygtk,glade,Python,Gtk,Pygtk,Glade,我在glade中制作了一个gui,我想把它放在python程序中。我正在修改我在网上找到的教程中的说明,以便加载到我的glade文件中(http://www.pygtk.org/articles/pygtk-glade-gui/Creating_a_GUI_using_PyGTK_and_Glade.htm). 当我遇到问题时,我尝试了一些基本的东西(一个按钮),称之为与教程中相同的东西,并复制粘贴他们的代码,但仍然不起作用。我还看了一眼(http://www.linuxjournal.com/

我在glade中制作了一个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之前,它工作得很好。我得到的错误是:

/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

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

Expected <glade-interface>.  Got  <interface>
应为空。得到
因此,XML文件有接口标记,但PyGTK库需要glade接口标记。

尝试以下代码:

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

因为我总是在这方面遇到问题,下面是我用于其中一个的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()
在Glade中,您只需添加一个窗口,将其命名为
MainWindow
,并为每种格式保存两个版本的文件名,如上所述;这些片段应该分别处理它们

希望这对某人有所帮助,

干杯

这非常有效

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

如果您在python中使用GTK+3,请参阅


这就回答了你的问题:看看这篇文章中的这个链接,你将能够得到代码示例,这篇文章是葡萄牙语的。谢谢,这就是我最后所做的(已经完成了,但这将有助于其他人的参考):)。一般来说,如果答案中包含对代码意图的解释,那么答案会更有帮助,为什么不引入其他人就解决了问题。虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。谢谢你提高了答案的参考价值,让它更容易理解!
#!/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()
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class Handler:
    def onDestroy(self, *args):
        Gtk.main_quit()

    def onButtonPressed(self, button):
        print("Hello World!")

builder = Gtk.Builder()
builder.add_from_file("builder_example.glade")
builder.connect_signals(Handler())

window = builder.get_object("window1")
window.show_all()

Gtk.main()