Perl / Tk:获取选项菜单的选定值

时间:2010-04-13 11:46:26

标签: perl

我正在开发Perl / Tk中的一个界面 在那里我使用一个optionmenu列出用户的名字 在从optionmenu中选择用户时,它应显示员工的相应出生日期 我应该能够更新所选用户的出生日期。

我写了以下代码。

$dob_label = $form_name -> Label(-text=>"BirthDay")->place(-x=>150,-y=>200);

$dob=$form_name->DateEntry(-width=>11,-parsecmd=>\&parse,-formatcmd=>\&format)->place(-x=>250,-y=>200);

$ename = $form_name->Optionmenu(-variable=>\$select_value,-options => [@names],
-command=>sub {&get_id_date($hash_ref,$eid,$dob,$_[-1])})->place(-x=>250, -y=>100);

$post_button=$form_name->Button(-text=>"Add",-command=>[\&Add_Birthday,$select_value,$dob,"edit"])->place(-x=>250,-y=>275);

$dob_label = $form_name -> Label(-text=>"BirthDay")->place(-x=>150,-y=>200); $dob=$form_name->DateEntry(-width=>11,-parsecmd=>\&parse,-formatcmd=>\&format)->place(-x=>250,-y=>200); $ename = $form_name->Optionmenu(-variable=>\$select_value,-options => [@names], -command=>sub {&get_id_date($hash_ref,$eid,$dob,$_[-1])})->place(-x=>250, -y=>100); $post_button=$form_name->Button(-text=>"Add",-command=>[\&Add_Birthday,$select_value,$dob,"edit"])->place(-x=>250,-y=>275);

函数get_id_date用于使用员工的姓名获取员工的id和dob。

它返回正确的id和dob。

然后我编辑了员工的dob。

我正在调用Add_Birthday函数将更改保存到数据库中。 但问题是,变量$ select_value总是在optionmenu中具有名字的值。 实际上它应该具有optionmenu中最后一个选定项的值。

这个代码中的问题是什么,

请为此提供解决方案。

提前致谢。

1 个答案:

答案 0 :(得分:3)

创建Button时,您将$ select_value的当前值传递给按钮/命令设置。按下按钮时,$ select_value的旧值已经过评估并在命令参数列表中设置。您需要使命令成为闭包,以便在按下按钮之前不评估$ select_value,例如:

-command => sub { Add_Birthday($select_value, "dob", $edit) }

为了完整起见,我还应该提到另一种方法是传递参考文献:

-command => [\&Add_Birthday, \$select_value, "dob", \$edit]

但是这需要重写函数以容纳参数列表中的引用。