0

我在树视图上有一个弹出菜单,用户可以在其中选择要从备份恢复的机器。我想简化界面并制作一个根据可用文件动态生成的子菜单。这是我到目前为止所拥有的:

$restore_item->set_submenu($arc_menu);
open( FILE, "archives.db" ) or die("Unable to open file");
foreach (<FILE>) {
    # if record is correct
    if ( $_ =~ /archive=(.+)/ ) {
        my $item = new Gtk2::MenuItem( "_" . $1 );
        $item->signal_connect( 'activate' => sub { print "selected\n"; });
        $arc_menu->append($item);
    }
}
close(FILE); 

但是,在现实生活中,我将不得不阅读菜单项文本,因为文件可以动态更改,我不能依赖计数或其他东西。我不明白如何从回调中获取菜单项文本。

4

1 回答 1

1

至少有两种选择。将可选参数传递给回调 (user_data) 或从 Gtk2::MenuItem ( $item->get_label) 获取标签。

对于前者,您可以使用以下内容:

$item->signal_connect('activate' => \&on_button_activate, $1);
[...]

sub on_button_activate
{
        # Do whatever you need.  The second parameters is
        # user_data (the filename in this case).
        my ($item, $user_data) = @_;
        print $item->get_label;
        print $user_data;
}
于 2013-03-14T03:33:59.060 回答