2013-03-12 23 views
0

我在彈出菜單上的樹視圖中用戶選擇要從備份中恢復的機器。我想簡化界面並製作一個根據可用文件動態生成的子菜單。這是我到目前爲止有:在Perl GTK + 2中提取菜單項文本

$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); 

但是,在現實生活中,我將要讀菜單項文本文件,可以動態地改變,我不能靠計數或東西。我無法理解如何從回調中獲取菜單項文本。

回答

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; 
} 
+0

我試過了,但我得到***通過一攬子「Gtk2的視覺:: CheckMenuItem」在無法找到對象的方法「get_label」 ./ foo.pl第80行。在libgtk2-perl 2:1.223-1build3中不支持嗎? – TheAmigo 2015-03-27 15:46:11

+0

找到我的答案:print $ item-> child-> get_label; – TheAmigo 2015-03-27 15:48:46