当我运行我的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,GdkPixbuf.Pixbuf,object,Pango.Weight)
最后几列是从关联的GtkTreeView中隐藏的,但警告发生在TreeView创建之前,所以我确定它来自ListStore.Needless说,我确信我传递的所有行都在正确的格式,因为,就像我说的那样,警告总是在第一行之后引发,无论我先添加哪一行.
有谁知道是什么原因引起的?它并没有阻止我的应用程序运行,所以它不是紧急情况,但我宁愿不让它为最终用户吐出警告.
编辑:
我确认使用Python的-W all命令行参数,实际上是为所有行引发了警告.
我尝试使用pdb进入append()方法,但是,当它尝试设置包含GdkPixbuf的列的值时,它会卡在gi代码的循环中,所以我从未真正看到调试程序时出现的警告.我的猜测是Pixbuf导致问题,但我不知道如何更改它以摆脱警告. Pixbuf在TreeView中正确呈现,所以我不确定发生了什么.
PyGTK似乎在创造奇怪的错误方面非常有才华 – 特别是那些让我们疯狂追逐的错误.我已经打了六到七个不同的错误,最终只是掩盖了另一个问题……有时甚至是一个无关的问题.
同样,运行谷歌搜索显示这已被记录,但可能没有解决……? (一个这样的例子:https://bugs.launchpad.net/ubuntu/+source/jockey/+bug/814991)