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

少なくとも2つの選択肢があります。オプションのパラメーターをコールバック(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 に答える