神秘的GObject警告:断言`G_IS_OBJECT(object)'失败

时间:2011-08-11 20:15:14

标签: python gtk pygtk gobject pygobject

当我运行我的GTK(Python GObject内省)应用程序时,我有一个警告,我无法弄清楚它的来源。当应用程序加载并且我正在填充GtkListStore时,在我第一次添加行之后,我收到以下警告:

/usr/lib/python2.7/site-packages/gi/types.py:44: Warning: g_object_set_qdata: assertion `G_IS_OBJECT (object)' failed
  return info.invoke(*args)

其余的行追加而没有任何进一步的警告。实际上,它总是只被提升一次,总是在第一个要追加的项目上。但是,该行的实际内容似乎并不重要;它无论如何都会提出警告。当程序完成加载时,当我在TreeView中浏览它们时,所有行似乎都没问题。

我的列表商店如下所示:

self.list_store = Gtk.ListStore(bool, str, str, str, str, str, str,
                                str, str, str, str, GdkPixbuf.Pixbuf,
                                str, str, str, object, Pango.Weight)

最后几列是从相关的GtkTreeView中隐藏的,但警告发生在TreeView创建之前,所以我确定它来自ListStore.Needless说,我确定所有的行我都是传递的格式是正确的,因为就像我说的那样,警告总是在第一行之后引发,无论我先添加哪一行。

有谁知道可能导致这种情况的原因是什么?它并没有阻止我的应用程序运行,所以这不是紧急情况,但我宁愿不让它为最终用户吐出警告。


编辑: 我确认使用Python的-W all命令行参数,实际上是为所有行引发了警告。

我尝试使用append()单步进入pdb方法但是,当它尝试设置包含GdkPixbuf的列的值时,它会卡在gi代码的循环中,所以我从未真正看到调试程序时出现的警告。我的猜测是Pixbuf导致问题,但我不知道如何更改它以摆脱警告。 Pixbuf在TreeView中正确呈现,所以我不确定发生了什么。

2 个答案:

答案 0 :(得分:4)

对此进行疯狂猜测......

PyGTK似乎在创造奇怪的错误方面非常有才华 - 特别是那些让我们陷入疯狂追逐的错误。我已经打了六七个不同的错误,最终只是掩盖了另一个问题......有时甚至是一个无关的问题。

同样,运行谷歌搜索显示这已被记录,但可能没有解决......? (一个这样的例子:https://bugs.launchpad.net/ubuntu/+source/jockey/+bug/814991

如果没有抛出任何错误,也许你应该编写一个catch语句来解决最终程序中的错误?

答案 1 :(得分:0)

问题在于Gtk.py的TreeModel._convert_value。它检查是否可以将值放在GObject.Value()中,但在检查它是否合适之前,它会使用类型初始化Value。

我能够通过将gtk.TreeStore()传递给Gdk.Pixbuf的类型更改为gobject.TYPE_PYOBJECT来解决此问题。