我正在开发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中最后一个选定项的值。
这个代码中的问题是什么,
请为此提供解决方案。
提前致谢。
答案 0 :(得分:3)
创建Button时,您将$ select_value的当前值传递给按钮/命令设置。按下按钮时,$ select_value的旧值已经过评估并在命令参数列表中设置。您需要使命令成为闭包,以便在按下按钮之前不评估$ select_value,例如:
-command => sub { Add_Birthday($select_value, "dob", $edit) }
为了完整起见,我还应该提到另一种方法是传递参考文献:
-command => [\&Add_Birthday, \$select_value, "dob", \$edit]
但是这需要重写函数以容纳参数列表中的引用。