8

当我运行我的 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。不用说,我确定我传递的所有行都在正确的格式,因为就像我说的那样,警告总是在第一行之后提出,无论我先添加哪一行。

有谁知道是什么原因造成的?它不会阻止我的应用程序运行,所以它不是紧急情况,但我宁愿不让它向最终用户发出警告。


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

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

4

2 回答 2

4

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

PyGTK 似乎在创造奇怪的错误方面很有天赋——尤其是那些让我们大吃一惊的错误。我已经与六七个不同的此类错误作斗争,这些错误最终只是掩盖了另一个问题……有时甚至是一个不相关的问题。

尽管如此,运行谷歌搜索表明这已被记录在案,尽管可能没有解决......?(一个这样的例子:https ://bugs.launchpad.net/ubuntu/+source/jockey/+bug/814991 )

如果这没有引发任何错误,也许您应该编写一个 catch 语句来消除最终程序中的错误?

于 2011-08-13T19:34:21.637 回答
0

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

gtk.TreeStore()我能够通过更改传递给from Gdk.Pixbufto的类型来解决这个问题gobject.TYPE_PYOBJECT

于 2012-07-09T19:12:10.280 回答