Perl 如何获取使用Gtk2::Builder创建的小部件的名称(或id)?

Perl 如何获取使用Gtk2::Builder创建的小部件的名称(或id)?,perl,gtk,gtkbuilder,Perl,Gtk,Gtkbuilder,我正在将应用程序从使用转换为。当使用 @widgets = $glade_object->get_widget_prefix('') 我可以通过以下方式获得小部件的名称(设置在Glade中) $widgets[0]->get_widget_name 使用Gtk2::Builder,我可以使用 @widgets = $builder_object->get_objects 但是,$widgets[0]->get\u widget\u name是未知的$widgets[0]-

我正在将应用程序从使用转换为。当使用

@widgets = $glade_object->get_widget_prefix('')
我可以通过以下方式获得小部件的名称(设置在Glade中)

$widgets[0]->get_widget_name
使用Gtk2::Builder,我可以使用

@widgets = $builder_object->get_objects
但是,
$widgets[0]->get\u widget\u name
是未知的
$widgets[0]->get_name
只给我widget类,例如GtkImage

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

谢谢你的帮助。

谢谢@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;                                         

这是一种黑客行为,但它是有效的。欢迎提供更好/更清洁的解决方案

$widget->Gtk2::Buildable::get_name()如果需要widget的名称,则应该执行此操作。这是GtkWidget和GtkBuildable的
get_name
方法之间的名称冲突。我不知道如何在Perl中实现这一点,但您需要以某种方式调用GtkBuildable的版本。