2010-04-13 39 views
2

我正在Perl/Tk中開發一個接口。
因爲我使用一個選項菜單來列出用戶的名稱。
從選項菜單中選擇用戶時,應顯示該員工的相應出生日期。
而且我應該能夠更新所選用戶的出生日期。Perl/Tk:獲取選項菜單的選定值

我寫了下面的代碼。

$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和出生日期。

它返回正確的id和dob。

然後我編輯了僱員的dob。

而我打電話Add_Birthday函數將更改保存到數據庫。 但是,問題在於,變量$ select_value在選項菜單中始終具有名字的值。 實際上它應該具有選項菜單中最後一個選定項目的值。

那麼,什麼是這個代碼的問題,

請給這個解決方案也。

在此先感謝。

+0

你想使用'-textvariable'而不是'-variable'嗎? http://search.cpan.org/perldoc?Tk::Optionmenu – 2010-04-13 12:28:06

+0

我也嘗試過使用-textvariable也是。那時我也遇到了同樣的問題。 – kiruthika 2010-04-13 12:31:04

回答

3

當您創建按鈕時,您將當前值$ select_value傳遞給設置的按鈕/命令。在按下按鈕時,$ select_value的舊值已經被評估並設置在命令參數列表中。直到按下按鈕,你需要讓你的命令關閉,使得$ select_value未評估,如:

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

爲了完整起見,我還要提到的是這樣做的另一種方式是在引用傳遞:

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

但是這需要重寫函數以適應參數列表中的引用。

+0

非常感謝。 – kiruthika 2010-04-15 03:46:34

相關問題