perltk小部件命令可以访问自身吗?

我有一个具有-command回调的 perl TK 小部件:

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

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

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

我已经查看了@_传递给 sub的参数,但它们只包含小部件的值和操作(例如“向上”)。我希望能够像在 javascript 中一样通过 $self 或“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();


以上是perltk小部件命令可以访问自身吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>