【问题标题】:GtkBuilder and "names"GtkBuilder 和“名称”
【发布时间】:2011-11-25 00:29:02
【问题描述】:

我一直试图在 GtkBuilder 对象中获取所有 GtkWidgets 的“名称”。

我已经设法通过gtk_builder_get_objects() 从构建器对象中获取所有对象并将它们存储在一个 GSList 中。

但是,当我在 gobjects(我将其转换为 GtkWidgets)上使用 gtk_widget_get_name() 时,我会得到诸如“GtkWindow”和“GtkButton”之类的通用名称,而不是显示在林间空地上的“window1”或“button1”。

任何帮助都将非常感激,并使这位程序员非常高兴。

【问题讨论】:

标签: c gtk gtkbuilder


【解决方案1】:

我正在做同样的事情。我能够使用从.glade 文件中获取id= 字符串 gtk_buildable_get_name() 指定为 here

注意:在 2.20 之前,GtkBuilder 将构造部件的“name”属性设置为“id”属性。在 GTK+ 2.20 或更高版本中,您必须使用 gtk_buildable_get_name() 而不是 gtk_widget_get_name() 来获取“id”,或者在 UI 定义中设置“name”属性。

【讨论】:

  • 使用 Perl 的注意:$widget->get_name() 调用 gtk_widget_get_name()。要调用 gtk_buildable_get_name(),请使用: $name = Gtk3::Buildable::get_name($widget)
【解决方案2】:

为构建器设置的名称与GtkWidget 的名称不同。 GtkBuilder 维护一个内部哈希表,其名称在GtkBuilder UI definitions 中设置,来自文件或字符串(从中添加构建器)和关联对象。它用于在调用gtk_builder_get_object () 时检索对象。利用GtkWidget"name" 属性。在GtkBuilder UI definitions 中设置"name" 属性以设置GtkWidget 的名称,可以使用gtk_widget_get_name() 检索。
希望这会有所帮助!

【讨论】:

  • 非常感谢。我的意思是,谢谢。题外话:gtkbuilder 页面没有说明或强调有两个单独的“名称”属性这一事实。你知道我可以从哪里获得有关 glade 和 gtkbuilder 的更好信息吗?
  • @seininn:不客气!好吧GTkBuilder page 从来没有说名称是集合是关联GtkWidget 的属性。它说它是在 UI 描述中分配给它们的名称。因此,与GtkWidget 关联的属性"name" 不是被设置的属性,而是一个标识符。我想你搞混了:) ...我认为在线文档和论坛是我能想到的最好的资源glade & GtkBuilder
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多