神秘的G OBJECT警告:断言“G_IS_OBJECT(OBJECT)”失败

2024-05-27 11:17:22 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行GTK(Python GObject introspection)应用程序时,我收到一个警告,我无法找出它的源代码。当加载应用程序并填充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命令行参数确认了警告实际上是针对所有行发出的。

我试着使用pdb进入append()方法,但有趣的是,当它尝试设置包含GdkPixbuf的列的值时,它被困在gi代码中的循环中,所以我从来没有看到调试程序时发出的警告。我猜是Pixbuf引起了这个问题,但是我不知道如何改变它来消除这个警告。Pixbuf在TreeView中正确渲染,所以我不确定发生了什么。


Tags: 应用程序警告gtkobject源代码usrgobjecttreeview
2条回答

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

我可以通过将传递到gtk.TreeStore()的类型从Gdk.Pixbuf更改为gobject.TYPE_PYOBJECT来解决这个问题。

对这件事胡乱猜测。。。

PyGTK似乎很擅长制造奇怪的错误——尤其是那些让我们大惊小怪的错误。我已经克服了六七个不同的错误,最终,这些错误只是掩盖了另一个问题…有时甚至是一个无关的问题。

尽管如此,运行一个Google搜索显示这已经被记录在案了,尽管也许还没有解决。。。?(例如:https://bugs.launchpad.net/ubuntu/+source/jockey/+bug/814991

如果这没有抛出任何错误,也许您应该在中编写一个catch语句以在最终程序中消除错误?

相关问题 更多 >

    热门问题