Загадочное предупреждение GObject: сбой утверждения `G_IS_OBJECT (object) ' - PullRequest
5 голосов
/ 12 августа 2011

У меня появляется предупреждение при запуске приложения 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что предупреждение фактически поднимается для всех строк.

Я попытался войти в метод append(), используя pdb, но, между прочим, он застревает в цикле в коде gi, когда пытается установить значение столбца, содержащего GdkPixbuf, поэтому яна самом деле никогда не увидите предупреждение при отладке программы.Я предполагаю, что Pixbuf вызывает проблему, но я понятия не имею, как изменить его, чтобы избавиться от предупреждения.Pixbuf правильно отображает в TreeView, поэтому я не уверен, что происходит.

Ответы [ 2 ]

4 голосов
/ 13 августа 2011

Делая дикие предположения в этом ...

PyGTK, кажется, довольно талантлив в создании странных ошибок - особенно тех, которые отправляют нас в погони за диким гусем.Я сталкивался с шестью или семью различными такими ошибками, которые, в конце концов, просто маскируют другую проблему ... иногда даже не связанную.

Все равно, поиск Google показывает, что это было задокументированоХотя, возможно, не решена ...?(Один из таких примеров: https://bugs.launchpad.net/ubuntu/+source/jockey/+bug/814991)

Если это не приводит к каким-либо ошибкам, возможно, вам следует написать инструкцию catch, чтобы заглушить ошибку в окончательной программе?

0 голосов
/ 09 июля 2012

Проблема в Gtk.py's TreeModel._convert_value. Он проверяет, может ли оно поместить значение в GObject.Value(), но инициализирует значение типом, прежде чем проверять, подходит ли оно.

Мне удалось обойти проблему, изменив тип, передаваемый на gtk.TreeStore() с Gdk.Pixbuf на gobject.TYPE_PYOBJECT.

...