Perl Tk Key Binding для входа - PullRequest
       35

Perl Tk Key Binding для входа

2 голосов
/ 16 июня 2020

Я пытаюсь создать GUI, в котором есть $ cmd_entry для ввода и печати ввода в $ log_frame после нажатия клавиши «Enter». Однако привязка не работает. Я не знаю, почему функция обратного вызова будет работать несколько раз, но не несколько раз. Когда я меняю привязку клавиш к, она срабатывает один раз, когда я дважды нажимаю "Tab".

use Tk;
use Tk::ROText;

my $configuration_window = MainWindow->new(-title => "Testing");
$configuration_window->geometry("1024x800");

my $log_frame = $configuration_window->Scrolled("ROText", -scrollbars => 'os',-background => "white",-foreground => "black")->pack(-side => 'left', -expand => 1, -fill => 'both', -padx => 4, -pady => 4);
my $list_frame = $configuration_window->Frame(-borderwidth => 1, -relief => 'groove')->pack(-side => 'right', -fill => 'both', -expand => 1, -padx => 4, -pady => 4);
my $cmd_entry = $log_frame->Entry(-background => "white")->pack(-side => "bottom", -fill => 'x');

$cmd_entry->bind(ref $cmd_entry,'<Enter>',sub {sendLog("enter");});

$log_frame->insert('end', "> ");

MainLoop;

sub sendLog{
    my ($text) = @_;
    $log_frame->insert('end', "$text\n> ");
}

1 Ответ

3 голосов
/ 16 июня 2020

В этой строке есть несколько проблем:

$cmd_entry->bind(ref $cmd_entry,'<Enter>',sub {sendLog("enter");});

a) bind не принимает ссылку на виджет входа в качестве первого аргумента.

b) ' 'тег привязки относится к событию, когда виджет вводится с помощью мыши или клавиатуры, а не с помощью клавиши ввода, которая имеет вид .

Попробуйте:

$cmd_entry->bind('<Return>',sub {sendLog("enter");});
$cmd_entry->bind('<Tab>',sub {sendLog("tab");});
...