2010-04-13 5 views
2

Я разрабатываю один интерфейс в Perl/Tk.
В том, что я использую один optionmenu для перечисления имен пользователей.
И при выборе пользователя из optionmenu он должен отображать соответствующую дату рождения сотрудника.
И я должен иметь возможность обновлять дату рождения выбранного пользователя.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 используется, чтобы получить идентификатор и DOB работника, используя имя сотрудника.

Он возвращает правильный идентификатор и добу.

Затем я отредактировал dob сотрудника.

И я вызываю функцию Add_Birthday для сохранения изменений в базе данных. Но в чем проблема в этом случае, переменная $ select_value всегда имеет значение first name в optionmenu. Фактически он должен иметь значение последнего выбранного элемента в меню параметров.

Так что проблема в этом коде,

Пожалуйста, дайте разрешение для этого также.

Заранее спасибо.

+0

Вы использовали '-textvariable' вместо' -variable'? http://search.cpan.org/perldoc?Tk::Optionmenu –

+0

Я тоже пробовал с -textvariable. В то же время я столкнулся с этой же проблемой. – kiruthika

ответ

3

При создании кнопки вы передаете текущее значение $ select_value в настройку кнопки/команды. Когда вы нажмете кнопку, старое значение $ select_value уже было оценено и установлено в списке аргументов команды. Вы должны сделать вашу команду замыкания, так что $ SELECT_VALUE не вычисляются, пока кнопка не будет нажата, например:

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

Для полноты следует также отметить, что еще один способ сделать это, чтобы пройти в ссылках:

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

Но для этого требуется переписать функцию для размещения ссылок в списке аргументов.

+0

большое спасибо .. – kiruthika

Смежные вопросы