8

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)

残りの行は、それ以上の警告なしに追加されます。実際、これは常に1回だけ発生し、常に最初に追加されるアイテムで発生します。ただし、行の実際の内容は重要ではないようです。何があっても警告を発します。プログラムのロードが完了すると、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()を使用してメソッドにステップインしようとしましたが、興味深いことに、GdkPixbufを含む列の値を設定しようとするとpdb、コード内でループが発生するため、プログラムのデバッグ時に警告が表示されることはありません。gi私の推測では、Pixbufが問題を引き起こしていると思いますが、警告を取り除くためにそれを変更する方法がわかりません。PixbufはTreeViewで正しくレンダリングされるため、何が起こっているのかわかりません。

4

2 に答える 2

4

Taking a wild guess at this...

PyGTK seems to be rather talented at creating weird errors - especially ones that send us on wild goose chases. I've fought six or seven different such errors that, in the end, are just masking another issue...sometimes even an unrelated one.

All the same, running a Google search shows that this has been documented, though perhaps not solved...? (One such example: https://bugs.launchpad.net/ubuntu/+source/jockey/+bug/814991)

If this isn't throwing any errors, perhaps you should write a catch statement in to silence the error in the final program?

于 2011-08-13T19:34:21.637 に答える
0

問題はGtk.pyにありTreeModel._convert_valueます。値をに入れることができるかどうかをチェックしますが、GObject.Value()適切かどうかをチェックする前に、タイプで値を初期化します。

gtk.TreeStore()に渡されるタイプをからGdk.Pixbufに変更することで、問題を回避することができましたgobject.TYPE_PYOBJECT

于 2012-07-09T19:12:10.280 に答える