Как изменить данные в метке в Perl Tk? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь создать программу с Tk, которая будет брать данные из записи и, одним нажатием кнопки, создавать метку с этими данными.

Ниже приведен код, который я отлаживал. В процессе отладки я попробовал следующее:

  • используя ссылки на $printItem
  • подключить подпрограмму к -command перейти к подпрограмме
  • сочетая вышесказанное различными способами
use Tk; use strict; use warnings;

$mw = MainWindow -> new;

my $printItem = $mw -> Entry(-width = 20); $printItem -> pack;

$mw -> Button(-text => "Write.", -command => sub{ $mw -> Label(-text => "$printItem") -> pack} -> pack;

MainLoop;

Когда я нажимаю кнопку, на этикетке отображается только Tk::Entry=HASH([seemingly random hexadecimal number here]). Это явно не то, чего я хочу, и я хотел бы знать, как я могу получить желаемый эффект.

1 Ответ

2 голосов
/ 25 июня 2019

Tk::Entry=HASH(0xdeadbeef) - это то, как Perl структурирует объекты.И действительно, ваша переменная $printItem хранит объект класса Tk::Entry:

my $printItem = $mw -> Entry(-width = 20);

Чтобы получить строку из виджета Tk :: Entry , вы можете использовать его get метод :

... -command => sub { $mw->Label(-text => $printItem->get)->pack } ...

Полный рабочий пример:

use strict;
use warnings;
use Tk;

my $mw = MainWindow->new;

my $printItem = $mw->Entry(-width => 20); $printItem->pack;

$mw->Button(-text => "Write.", -command => sub { $mw->Label(-text => $printItem->get)->pack })->pack;

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