使用Glade代码的Python脚本会产生关于旧版GTK的glib错误

use*_*766 0 python ubuntu user-interface glade

我正在尝试使用Python作为后端创建我的第一个Glade GUI.我在Glade中创建了GUI并将文件保存为.glade.然后我创建了我的Python代码并将其保存在与glade文件相同的目录中.在终端中运行Python文件后,我收到以下消息:

    Traceback (most recent call last):
      File "glade6.py", line 56, in <module>
        main = Buglump()
      File "glade6.py", line 20, in __init__
        self.builder.add_from_file("glade6.glade")
    glib.GError: glade6.glade: required gtk+ version 3.10, current version is 2.24
Run Code Online (Sandbox Code Playgroud)

操作系统:Ubuntu 14.04.1 LTS 64位

并运行的Python文件:从" http://gnipsel.com/glade/index.html " 获取的代码

    #!/usr/bin/env python
    import sys

    try: 
      import gtk
      import gtk.glade
    except:
      print('GTK not available')
      sys.exit(1)
    try:
      import pygtk
      pygtk.require('2.0')
    except:
      pass

    class Buglump:

      def __init__(self):
        self.builder = gtk.Builder()
        self.builder.add_from_file("glade6.glade")
        self.builder.connect_signals(self)

        # the liststore
        self.liststore = gtk.ListStore(int,str)
        self.liststore.append([0,"Select an Item:"])
        self.liststore.append([1,"Row 1"])
        self.liststore.append([2,"Row 2"])
        self.liststore.append([3,"Row 3"])
        self.liststore.append([4,"Row 4"])
        self.liststore.append([5,"Row 5"])

        # the combobox
        self.combobox = self.builder.get_object("combobox1")
        self.combobox.set_model(self.liststore)
        self.cell = gtk.CellRendererText()
        self.combobox.pack_start(self.cell, True)
        self.combobox.add_attribute(self.cell, 'text', 1)
        self.combobox.set_active(0)

        self.window = self.builder.get_object("window1")
        self.window1.show()

      def on_combobox1_changed(self, widget, data=None):
        self.index = widget.get_active()
        self.model = widget.get_model()
        self.item = self.model[self.index][1]
        print "ComboBox Active Text is", self.item
        print "ComboBox Active Index is", self.index
        self.builder.get_object("label1").set_text(self.item)

      def on_window1_destroy(self, object, data=None):
        print "quit with cancel"
        gtk.main_quit()

    if __name__ == "__main__":
      main = Buglump()
      gtk.main()
Run Code Online (Sandbox Code Playgroud)

小智 5

import gtk实际进口gtk+2.x.如果你需要使用gtk+3,假设你已经安装了它,你需要写:

From gi.repository import Gtk (with capital letter G)
Run Code Online (Sandbox Code Playgroud)

删除这些行:

import gtk

import gtk.glade
Run Code Online (Sandbox Code Playgroud)

并记得将gtk代码中的所有实例更改为Gtk.示例:更改gtk.main_quit()Gtk.main_quit()