Geheimnisvolle GObject Warnung: assertion `G_IS_OBJECT (object)' failed
Habe ich eine Warnung wenn ich mein GTK (Python-GObject-Introspektion) Anwendung, und ich kann nicht herausfinden, seiner Quelle. Wenn die Anwendung geladen wird, und ich bin das Auffüllen einer GtkListStore, nachdem ich das allererste mal Anhängen einer Zeile, bekomme ich die folgende Warnung:
/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)
Den rest der Zeilen Anhängen ohne weitere Warnungen. In der Tat, es ist immer nur ausgelöst, einmal, immer auf das erste Element angehängt werden. Aber, der eigentliche Inhalt der Zeile scheinen nicht egal, es ist erhöhen die Warnung, egal was. Wenn das Programm fertig geladen ist, werden alle Zeilen scheinen in Ordnung zu sein, wenn ich navigieren Sie in der TreeView.
Meiner Liste speichern wie folgt aussieht:
self.list_store = Gtk.ListStore(bool, str, str, str, str, str, str,
str, str, str, str, GdkPixbuf.Pixbuf,
str, str, str, object, Pango.Weight)
Den letzten Spalten sind ausgeblendet, aus dem Zusammenhang GtkTreeView, aber die Warnung tritt auf, bevor das TreeView erstellt wird, so bin ich sicher, es kommt aus dem ListStore.Unnötig zu sagen, ich bin mir sicher, dass alle Zeilen, ich bin vorbei in das richtige format da, wie ich schon sagte, die Warnung wird immer ausgelöst, nachdem die erste Zeile, egal in welcher Zeile füge ich zuerst.
Hat jemand eine Idee, was könnte die Ursache sein? Es ist nicht zu verhindern, meine Anwendung ausgeführt wird, also es ist kein Notfall, aber ich würde lieber nicht haben, es spuckt Warnungen für den Anwender.
Bearbeiten:
Ich bestätigte mit Python -W all
commandline argument, die Warnung ist tatsächlich ausgelöst wird, für alle Zeilen.
Ich habe versucht, ein Schritt in die append()
Methode mit pdb
aber, interstingly, er bleibt stecken in einer Schleife, in der gi
- code, wenn es versucht, die Einstellung der Wert der Spalte, in der die GdkPixbuf, so dass ich eigentlich nie sehen, die Warnung ausgelöst, wenn das Debuggen des Programms. Meine Vermutung ist, dass die Pixbuf das problem verursacht, aber ich habe keine Ahnung, wie es zu ändern, um loszuwerden die Warnung. Die Pixbuf richtig gerendert wurde in der Strukturansicht ist, so bin ich nicht sicher, was Los ist.
- Ich denke, standardmäßig Python schweigen wiederholten Warnungen des gleichen Typs - also einfach nur weil du es einmal sehen bedeutet nicht, es ist nur einmal angehoben.
- Hm ok, das ist ein bisschen beruhigend.Meine Vermutung ist, dass es entweder nicht zu mögen den Pixbuf oder das Objekt in dort, aber ich habe keine Ahnung, wie sonst könnte ich es angeben.
- Hat Sie versuchen einen backtrace?
- Ok, zunächst einmal, indem Sie die Anwendung starten mit Python
-W all
commandline argument, ich bestätigte, dass die Abmahnung tatsächlich geschieht für jede Zeile, die Hinzugefügt wird. - Ich denke, ich bin neu, um stack-traces.Die
traceback
- Modul scheint nicht zu helfen, da es eine Warnung ist und nicht eine Ausnahme; ich kann nicht scheinen, um zu erfassen, Stapel, in dem die Warnung Auftritt. Ich konnte daswarnings
Modul zu zwingen, Warnungen ausgelöst werden, als Ausnahmen, aber dieser code ist passiert in einem thread undwarnings
ist nicht thread-safe. Irgendwelche Tipps wäre dankbar. - Ich wusste nicht, dass
warnings
ist nicht thread-safe. Aber wäre es nicht die Ausnahme noch zu bekommen erhöht? - Da
warnings
verändert den globalen Kontext, würde ich das nicht riskieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehmen Sie eine wilde Vermutung an dieser...
PyGTK scheint ziemlich talentiert im erstellen von komischen Fehlern - vor allem diejenigen, die uns auf Wildgans Verfolgungsjagden. Ich Kämpfe schon sechs oder sieben verschiedene solche Fehler, die, am Ende, sind nur die Maskierung ein anderes Thema...manchmal wird sogar ein nicht eine.
Alle das gleiche, läuft eine Google-Suche zeigt, dass dies dokumentiert wurde, wenn auch vielleicht nicht gelöst...? (Ein Beispiel: https://bugs.launchpad.net/ubuntu/+source/jockey/+bug/814991)
Wenn nicht, werfen keine Fehler, vielleicht sollten Sie schreiben, eine catch-Anweisung in der Stille der Fehler in das endgültige Programm?
warnings
context_manager ist nicht thread-sicher. Dies ist eine desktop-Anwendung, sodass der Benutzer nicht sehen würde, wenn Sie starten Sie es von einem Symbol, aber es ärgert mich, während die Entwicklung es.Ist das problem Gtk.py's
TreeModel._convert_value
. Es prüft, um zu sehen, ob es den Wert in einerGObject.Value()
, aber er initialisiert den Wert mit dem Typ vor der überprüfung, ob Sie geeignet.Konnte ich das problem umgehen, durch ändern des Typ übergeben
gtk.TreeStore()
ausGdk.Pixbuf
zugobject.TYPE_PYOBJECT
.