У меня появляется предупреждение, когда я запускаю приложение 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, поэтому я не уверен, что происходит.
-W all
, я подтвердил, что предупреждение действительно происходит для каждой добавляемой строки. - person   schedule 12.08.2011traceback
, похоже, не помогает, поскольку это предупреждение, а не исключение; Кажется, я не могу зафиксировать стек, в котором возникает предупреждение. Я мог бы использовать модульwarnings
, чтобы принудительно вызывать предупреждения как исключения, но этот код выполняется в потоке, аwarnings
не является потокобезопасным. Любые советы будут оценены. - person   schedule 12.08.2011warnings
не является потокобезопасным. Но разве исключение все равно не возникнет? - person ptomato   schedule 13.08.2011warnings
изменяет глобальный контекст, я бы не стал рисковать. - person   schedule 13.08.2011