1

GtkStatusbarPyGObject プロジェクトで、の gobject-introspection バインディングを使用してからウィジェットを削除しようとしていますgtk_container_remove ()

通常、GObject イントロスペクション Python バインディングを使用する場合、メソッド名は C 関数名から「型プレフィックス」を除いたものと同じで、明示的な引数が 1 つ少なくなります。たとえば、gtk_box_pack_end ()後で削除するウィジェットを追加するために呼び出します。

statusbar.pack_end(widget, False, True, 0)

経由でウィジェットを削除しようとすると、次のstatusbar.remove(widget)ように表示されます。

...
  関数内のファイル「/usr/lib/python2.7/dist-packages/gi/types.py」の 43 行目
    return info.invoke(*args, **kwargs)
TypeError: remove() は正確に 3 つの引数を取ります (2 つ指定)

引数の 1 つは暗黙的selfであり、他の 2 つの引数は明らかに数値であると想定されています。

メソッドの GIR は次のとおりです。

<method name="remove" c:identifier="gtk_container_remove">
  <return-value transfer-ownership="none">
    <type name="none" c:type="void"/>
  </return-value>
  <parameters>
    <parameter name="widget" transfer-ownership="none">
      <type name="Widget" c:type="GtkWidget*"/>
    </parameter>
  </parameters>
</method>

gtk_container_remove ()PyGObject で関数を呼び出すにはどうすればよいですか?

4

1 に答える 1

2

Gtk.Statusbarremove関数を別のシグネチャを持つ別の関数でオーバーライドします。ウィジェット、コンテナ、ステータスバーを破棄しようとすると、通知が送信され、ウィジェットが不要になることを期待してウィジェットが削除されます。

それ以外の場合は、次を試すことができますGtk.Container.remove(statusbar, widget)

于 2012-11-17T16:20:19.380 に答える