Perl / Tk: получение выбранного значения меню параметров - PullRequest
2 голосов
/ 13 апреля 2010

Я разрабатываю один интерфейс на Perl / Tk.
В этом я использую одну опцию для перечисления имен пользователей.
А при выборе пользователя из опционного меню должна отображаться соответствующая дата рождения сотрудника.
И я должен иметь возможность обновить дату рождения выбранного пользователя.

Я написал следующий код.

</p> <pre><code>$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 используется для получения идентификатора и имени сотрудника с использованием имени сотрудника.

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

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

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

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

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

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

1 Ответ

3 голосов
/ 13 апреля 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...