首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环以在Perl / Tkx中定义按钮。

循环以在Perl / Tkx中定义按钮。
EN

Stack Overflow用户
提问于 2014-12-30 03:02:36
回答 1查看 225关注 0票数 1

我试图通过一个循环在Perl中用Tkx定义一个按钮序列;每个按钮的文本和操作都定义在一个哈希表数组中。

但是,无论我单击哪个按钮,只触发最后一个按钮的动作。

这是我使用的代码。

代码语言:javascript
复制
use strict;
use Tkx;

my @Buttons = (
    { 'descr'=> "Button #0", 'cmd'=> sub { print "TODO: to implement (button #0)\n\n"; } },
    { 'descr'=> "Button #1", 'cmd'=> sub { print "TODO: to implement (button #1)\n\n"; } }
);

my %Widg;
$Widg{"."}= Tkx::widget->new(".");
$Widg{"."}->g_wm_title("List of buttons"); 
$Widg{"."}->g_wm_minsize(350, 300);

Tkx::font_create("H4", -family => "Helvetica", -size => 8);

$Widg{".fButton"} = $Widg{"."}->new_ttk__frame( -padding => "2 2 5 5");
$Widg{".fButton"}->g_grid(-row => 1, -sticky => "w");

my $id=-1;
foreach my $rh_measure (@Buttons) {
    ++$id;
    $Widg{".fButton.bRun$id"}=$Widg{".fButton"}->new_ttk__button(-text => $rh_measure->{'descr'}, -command => sub { &wrapper($id); });
    $Widg{".fButton.bRun$id"}->g_grid( -row => $id, -column => 1, -sticky => "w");
} 

Tkx::MainLoop;


sub wrapper {
    my $id=shift;
    print "Process command for button #$id\n";
    &{$Buttons[$id]->{'cmd'}}();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-30 03:02:36

实际上,您只需通过引用和未引用的参数调用命令即可。

代码语言:javascript
复制
$Widg{".fButton.bRun$id"}=$Widg{".fButton"}->new_ttk__button(-text => $rh_measure->{'descr'}, -command => [\&wrapper, $id]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27699096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档