Perl tk - вкладка между входными виджетами
У меня очень простой графический интерфейс, который взаимодействует с базой данных postgresql. Мэйнфрейм разделен на 4 квадранта, каждый из которых имеет 4 виджета входа. Вот пример кода одного квадранта
my $f_blue = $bottom_half->Frame(-bg=>'BLUE')-> pack(-side=>'left', -expand=>1, -fill=>'both');
$f_blue->Label(-text=>'BLUE', -bg=>'blue', -fg=>'white')->pack(-side=>'top');
my $blue_table = $f_blue->Table(-rows => 3,
-columns => 3,
-fixedrows => 1,
-fixedcolumns => 1,
-scrollbars => 'oo',
-relief => 'raised') -> pack(-side => 'top', -expand => 1, -fill=>'both');
$blue_table -> put(1,1,
$blue_table->Label(-text => 'Cs-137:'));
my $t_blue_cs137 = $blue_table->Entry(-selectbackground=>"blueviolet");
$blue_table -> put(1,2,$t_blue_cs137);
$blue_table -> put(1,3,
$blue_table->Label(-text => 'MBq'));
$blue_table -> put(2,1,
$blue_table->Label(-text => 'Tc-99m:'));
my $t_blue_tc99m = $blue_table->Entry(-selectbackground=>"blueviolet");
$blue_table -> put(2,2,$t_blue_tc99m);
$blue_table -> put(2,3,
$blue_table->Label(-text => 'MBq:'));
$blue_table -> put(3,1,
$blue_table->Label(-text => 'Tl-201:'));
my $t_blue_tl201 = $blue_table->Entry(-selectbackground=>"blueviolet");
$blue_table -> put(3,2,$t_blue_tl201);
$blue_table -> put(3,3,
$blue_table->Label(-text => 'MBq:'));
При вводе данных с помощью графического интерфейса я не могу перейти к следующей записи. Есть ли способ установить привязки клавиш, чтобы я мог зациклить, чтобы установить
`$t_blue_cs137` to be active
PRESS TAB
`$t_blue_tc99m` NOW ACTIVE
PRESS TAB
`$t_blue_tl201` NOW ACTIVE
PRESS TAB
Do the same with the next quadrant
`$t_red_cs137` in frame $f_red NOW ACTIVE
Есть ли способ сделать это в perlTK
Я пробовал следующее
$f_blue->bindtags( [ ($f_blue->bindtags)[$t_blue_cs137,$t_blue_tc99m,$t_blue_tl201] ] );
# fix the bindtags order so that widget events are
# processed before class events
$f_blue->bind("<Tab>", sub { $f_blue->focusNext; Tk->break; });
Тем не менее, это позволяет мне только вкладку между каждым субкадром и кнопками в графическом интерфейсе
1 ответ
Определять
-takefocus => 0,
в Table
конфигурации.
По умолчанию, -takefocus
установлен в истинное значение, которое вызывает FocusChildren
метод возврата пустого списка, а это, в свою очередь, означает, что фокус никогда не передается дочерним виджетам таблицы. Не лучший вариант по умолчанию, но это поведение было введено в Tk 402.001, и, вероятно, сейчас уже слишком поздно что-либо менять. Но, возможно, в документации должен быть параграф, описывающий эту ловушку...