2013-11-14 3 views
0

У меня очень простой графический интерфейс, который взаимодействует с базой данных postgresql. Мейнфрейм разделен на 4 квадранта с каждым квадрантом, имеющим 4 входных виджета. Ниже приведен пример кода из одного квадрантаPerl tk - вкладка между виджетами ввода

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; }); 

Однако, это только позволяет мне вкладку между каждым подрамником и кнопки в GUI

ответ

2

Define

-takefocus => 0, 

в конфигурации Table.

По умолчанию -takefocus установлено в истинное значение, которое вызывает метод FocusChildren для возврата пустого списка, а это, в свою очередь, означает, что фокус никогда не предоставляется дочерним виджетам таблицы. Не лучший дефолт, но это поведение было введено в Tk 402.001 и, вероятно, сейчас уже слишком поздно менять. Но, возможно, в документации, описывающей эту ловушку, должен быть абзац ...

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

  • Нет связанных вопросов^_^