【问题标题】:How do i get the name (or id) on an widget which was created with Gtk2::Builder?如何获取使用 Gtk2::Builder 创建的小部件的名称(或 ID)?
【发布时间】:2011-02-13 17:00:07
【问题描述】:

我正在将应用程序从使用 Gtk2::GladeXML 转换为 Gtk2::Builder。使用

获取所有小部件时
@widgets = $glade_object->get_widget_prefix('')

我可以使用

获取小部件的名称(在 Glade 中设置)
$widgets[0]->get_widget_name

使用 Gtk2::Builder 我获取所有小部件

@widgets = $builder_object->get_objects

但是$widgets[0]->get_widget_name 是未知的。 $widgets[0]->get_name 只是给了我小部件类,例如GtkImage.

所以我的问题是:如何获取使用 Gtk2::Builder 创建的小部件的名称(或 ID)?

感谢您的帮助。

【问题讨论】:

  • 这是 GtkWidget 和 GtkBuildable 的 get_name 方法之间的名称冲突。我不知道如何在 Perl 中执行此操作,但您需要以某种方式调用 GtkBuildable 的版本。

标签: perl gtk gtkbuilder


【解决方案1】:

感谢@johannes-sasongko! 这真的有效。所以我现在要做的是:

# save original package, e.g.: 'Gtk2::Image'
my $ref = ref $widgets[0]; 

# get the id
my $id = ( bless $widgets[0], "Gtk2::Buildable" )->get_name;  

# restore package
bless $widgets[0], $ref;                                         

这是一种 hack,但它确实有效。欢迎使用更好/更清洁的解决方案!

【讨论】:

    【解决方案2】:

    $widget->如果您需要小部件的名称,Gtk2::Buildable::get_name() 应该可以解决问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2013-03-30
      • 2010-12-23
      相关资源
      最近更新 更多