GtkBuilderと "名前"

私はGtkBuilderオブジェクト内のすべてのGtkWidgetsの「名前」を取得しようとしていました。

ビルダーオブジェクトからすべてのオブジェクトを gtk_builder_get_objects()経由で取得し、それらをGSListに格納することができました。

しかし、gobjects(GtkWidgetsにキャスト)で gtk_widget_get_name()を使用すると、 "window1"や "button1"の代わりに "GtkWindow"や "GtkButton"などの汎用名が取得されます。グレイドで表示されます。

どのような助けも 非常に 高く評価され、このプログラマーを非常に 喜ばせることになります。

6
PythonのGObjectイントロスペクションに関する同じ質問があります: stackoverflow.com/q/15393120/247696
追加された 著者 Flimm,

2 答え

私はまったく同じことをやっています。 .glade ファイルから id = 文字列を取得することができました ここ gtk_buildable_get_name()

Note: Prior to 2.20, GtkBuilder was setting the "name" property of constructed widgets to the "id" attribute. In GTK+ 2.20 or newer, you have to use gtk_buildable_get_name() instead of gtk_widget_get_name() to obtain the "id", or set the "name" property in your UI definition.

5
追加された
Perl:$ widget-> get_name()を使う人はgtk_widget_get_name()を呼び出すことに注意してください。 gtk_buildable_get_name()を呼び出すには、以下を使用します:$ name = Gtk3 :: Buildable :: get_name($ widget)
追加された 著者 TheAmigo,

ビルダーに設定された名前は、 GtkWidget の名前と同じではありません。 GtkBuilder は、ファイルまたは文字列(ビルダーが追加された)と関連オブジェクトから GtkBuilder UI定義に設定された名前を持つ内部ハッシュテーブルを保持します。 gtk_builder_get_object()が呼び出されたときにオブジェクトを取得するために使用されます。 " GtkWidget のa>プロパティを使用します。 gtk_widget_get_name()を使用して取得できる GtkWidget の名前を設定するには、 GtkBuilder UI定義 "name" /code>。
お役に立てれば!

どうもありがとうございます。私はこれを意味する、ありがとう。オフトピック:gtkbuilderのページでは、2つの別個の「名前」プロパティがあるという事実については言及も強調もしていませんでした。あなたはgladeとgtkbuilderに関するより良い情報をどこで得ることができるか知っていますか?
追加された 著者 seininn,
@seininn:あなたは大歓迎です! GTkBuilder ページでは、その名前はsetは関連する GtkWidget のプロパティです。それはその名前がUIの説明でそれらに割り当てられていると言います。したがって、 GtkWidget に関連付けられた "name" プロパティは設定されていませんが、識別子です。私はあなたがそれを混同していると思う:) ...私は glade GtkBuilder のために考えることができる最もよい資料はオンライン文書とフォーラムだと思う。
追加された 著者 another.anon.coward,