perl tk widget -command 可以访问自身吗?

Can a perl tk widget -command access itself?

我有一个 perl TK 小部件,它有一个 -command 回调:

my $widget = $mw->Spinbox( -from => -1000, -to => 1000, -increment => 1, -width => 4, -textvariable => $textvariable, -command => sub { ... });

我想在子命令内的小部件上调用一个方法。

如何以通用方式在回调中获取对小部件本身的引用(不是通过其名称访问 $widget,而是通过一些通用的方式)?

我查看了传递给子程序的 @_ 参数,但它们只包含小部件的值和操作(例如“up”)。我希望能够通过 $self 或 javascript.

中的“this”访问小部件

有两种方法可以将参数传递给回调:

  1. 使用闭包。
  2. 传递包含回调和参数的匿名数组。

在这两种情况下,您需要在将对象分配给它之前声明包含小部件的变量,否则它将不可用。

#!/usr/bin/perl
use warnings;
use strict;

use Tk qw{ MainLoop };

my $mw = 'MainWindow'->new();

my $button1;
$button1 = $mw->Button(-text    => 'Start',
                       -command => sub { $button1->configure(-text => 'Done') }
                      ) ->pack;

my $button2;
$button2 = $mw->Button(-text    => 'Start',
                       -command => [
                           sub {
                               my ($button) = @_;
                               $$button->configure(-text => 'Done');
                           }, $button2
                       ]
                      ) ->pack;

MainLoop();