使用Gtk3和python添加图标时的核心转储

时间:2014-08-01 18:55:48

标签: python-3.x gtk3 pygobject

我正在使用GTK3(来自gi.repository)和python3创建一个UI。当我向UI添加默认图标然后运行程序时,它会因同伴错误而崩溃:

segmentation fault (core dumped) python main.py

我正在使用Gtk.Window的set_icon_list方法添加图标:

self.c_win.set_icon_list(icon_list)

如果我对此行发表评论,该程序将按预期运行。我得到了带有以下功能的图标列表:

def load_icon():
    req = pkg_resources.Requirement.parse("pympress")

   # If pkg_resources fails, load from directory
   try:
       icon_names = pkg_resources.resource_listdir(req, "share/pixmaps")
    except pkg_resources.DistributionNotFound:
       icon_names = os.listdir("share/pixmaps")
    icons = []
    for icon_name in icon_names:
       if os.path.splitext(icon_name)[1].lower() != ".png":
           continue

        # If pkg_resources fails, load from directory
        try:
            icon_fn = pkg_resources.resource_filename(req, "share/pixmaps/{}".format(icon_name))
        except pkg_resources.DistributionNotFound:
            icon_fn = "share/pixmaps/{}".format(icon_name)
        try:
            icon_pixbuf = Pixbuf()
            icon_pixbuf.new_from_file(icon_fn)
            icons.append(icon_pixbuf)
        except Exception as e:
            print(e)
    return icons

它返回一个Pixbuf列表,它是set_icon_list的预期输入。

完整的代码可以在github上找到:https://github.com/Jenselme/pympress知道问题是什么吗?

1 个答案:

答案 0 :(得分:1)

虽然它不应该崩溃,但部分问题可能是由于new_from_file()的使用方式。 new_from_file()是一个构造函数,它返回一个 new pixbuf,你应该存储在一个变量中。它不会将文件的内容加载到现有的pixbuf中。所以“图标”列表实际上包含一堆空(或更确切地说是1x1)pixbuf。

# Creates a new 1x1 pixbuf.
icon_pixbuf = Pixbuf()

# Creates a new pixbuf from the file the value of which is lost
# because there is no assignment.
icon_pixbuf.new_from_file(icon_fn)

# Stores the first 1x1 pixbuf in the list.
icons.append(icon_pixbuf)

你真正想要的是:

icon_pixbuf = Pixbuf.new_from_file(icon_fn)
icons.append(icon_pixbuf)

无论如何,它不应该是段错误的。请使用导致崩溃的最小代码示例将其记录为错误: https://bugzilla.gnome.org/enter_bug.cgi?product=pygobject

另请注意正在使用的gi和GTK +的版本:

import gi
from gi.repository import Gtk
print(gi.version_info)
print(Gtk.MINOR_VERSION)