使用Perl&;闪烁GUI按钮;Mac上的Ttk

使用Perl&;闪烁GUI按钮;Mac上的Ttk,perl,tkx,Perl,Tkx,使用PerlV5.28,以及 macOS v10.13.6上的ActiveState Tcl/TTk v8.6.9(“aqua”风格)。这个 下面的演示根据需要工作,支持调用给定的 使用GUI按钮(使用鼠标)或 使用“普通”文本字符的键盘输入 我想要的另一个特性是视觉反馈 键盘打开时按下(闪烁)的图形按钮 使用替代激活。我找到了看起来像Tcl的东西 使用命令的解决方案,以及 关于使用Perl的参考 虚拟事件方法调用。我甚至找到了与之相当的Perl Tkx::after(100)创建建议延迟的函数

使用PerlV5.28,以及 macOS v10.13.6上的ActiveState Tcl/TTk v8.6.9(“aqua”风格)。这个 下面的演示根据需要工作,支持调用给定的 使用GUI按钮(使用鼠标)或 使用“普通”文本字符的键盘输入

我想要的另一个特性是视觉反馈 键盘打开时按下(闪烁)的图形按钮 使用替代激活。我找到了看起来像Tcl的东西 使用命令的解决方案,以及 关于使用Perl的参考 虚拟事件方法调用。我甚至找到了与之相当的Perl
Tkx::after(100)
创建建议延迟的函数调用。但我 我不知道如何把这一切结合起来以实现 预期效果。如有任何帮助,请谅解 就像其他一些TTk功能一样,这在Mac上可能不起作用

代码

#/usr/bin/env perl
#-*-cperl-*-
使用警告;
严格使用;
使用Tkx$Tkx::TRACE=1;
my$mw=Tkx::widget->new(“.”);
$mw->g_wm_几何体('200x200+100+100');
我的$l=$mw->新标签
(
-text=>(“按钮测试Ttk v”.Tkx::info(“补丁级别”))
);
子问候语{print(STDERR”-->[Hello,world]按下\n“}
my$b=$mw->new\u ttk\u按钮
(
-text=>“你好,世界”,
-下划线=>0,
-command=>sub{greeting()}
);
$mw->g_绑定(“”,sub{$b->invoke()});
$mw->g_绑定(“”,sub{$b->invoke()});
$l->g_pack();
$b->g_pack();
Tkx::MainLoop();
打印(标准“程序退出…\n”);
运行日志

Tkx-1-0.0s-demo-12: wm geometry . 200x200+100+100
Tkx-2-0.0s-demo-14: info patchlevel
Tkx-3-0.0s-demo-14: winfo children .
Tkx-4-0.0s-demo-14: ttk::label .l -text {Button Test Ttk v8.6.9}
Tkx-5-0.0s-demo-26: winfo children .
Tkx-6-0.0s-demo-26: ttk::button .b -text {Hello, world} -underline 0 -command perl::callback
Tkx-7-0.0s-demo-28: bind . <h> perl::callback
Tkx-8-0.0s-demo-29: bind . <H> perl::callback
Tkx-9-0.0s-demo-30: pack .l
Tkx-10-0.0s-demo-31: pack .b
--> [ Hello, world ] pressed
Tkx-11-6.4s-demo-28: .b invoke
--> [ Hello, world ] pressed
Tkx-12-7.9s-demo-29: .b invoke
--> [ Hello, world ] pressed
Program exit...
Tkx-1-0.0s-demo-12:wm几何。200x200+100+100
Tkx-2-0.0s-demo-14:信息修补级别
Tkx-3-0.0s-demo-14:winfo儿童。
Tkx-4-0.0s-demo-14:ttk::label.l-text{Button Test ttk v8.6.9}
Tkx-5-0.0s-demo-26:winfo儿童。
Tkx-6-0.0s-demo-26:ttk::button.b-文本{Hello,world}-下划线0-命令perl::callback
Tkx-7-0.0s-demo-28:绑定。perl::回调
Tkx-8-0.0s-demo-29:绑定。perl::回调
Tkx-9-0.0s-demo-30:pack.l
Tkx-10-0.0s-demo-31:包装b
-->[你好,世界]按
Tkx-11-6.4s-demo-28:.b调用
-->[你好,世界]按
Tkx-12-7.9s-demo-29:.b调用
-->[你好,世界]按
程序退出。。。
下面是一个示例(在Ubuntu 21.04上测试)。通过在按钮上调用
g\u event\u generate(“”)
,将在按钮上自动调用
invoke()

use feature qw(say);
use strict;
use warnings;
use Tkx;
my $mw = Tkx::widget->new(".");
$mw->g_wm_geometry('200x200+100+100');

my $l = $mw->new_ttk__label(
    -text => ("Button Test Ttk v" . Tkx::info("patchlevel"))
);

sub greeting { say "--> [ Hello, world ] pressed"; }

my $b = $mw->new_ttk__button(
    -text      => "Hello, world",
    -underline => 0,
    -command   => sub { greeting() }
);
sub generate_button_click_event {
    $b->g_event_generate("<ButtonPress-1>");
    Tkx::after(
        200, sub {
            $b->g_event_generate("<ButtonRelease-1>");
        }
    );
}

$mw->g_bind('<h>', sub { generate_button_click_event() });
$mw->g_bind('<H>', sub { generate_button_click_event() });
$l->g_pack();
$b->g_pack();
Tkx::MainLoop();
say "Program exit...";
使用功能qw(比如说);
严格使用;
使用警告;
使用Tkx;
my$mw=Tkx::widget->new(“.”);
$mw->g_wm_几何体('200x200+100+100');
我的$l=$mw->新标签(
-text=>(“按钮测试Ttk v”.Tkx::info(“补丁级别”))
);
子问候语{say”-->[你好,世界]按下“;}
my$b=$mw->new\u ttk\u按钮(
-text=>“你好,世界”,
-下划线=>0,
-command=>sub{greeting()}
);
子生成按钮单击事件{
$b->g_事件_生成(“”);
Tkx::之后(
200分{
$b->g_事件_生成(“”);
}
);
}
$mw->g_绑定(“”,子{generate_button_click_event()});
$mw->g_绑定(“”,子{generate_button_click_event()});
$l->g_pack();
$b->g_pack();
Tkx::MainLoop();
说“程序退出…”;

我无法使
Tkx
在macOS 11.2.3上工作,请参阅问题。我感觉到了您的痛苦。我特别避免在我的个人项目中越过macOS High Sierra(v10.13),只是为了避免像您看到的那样的问题。由于苹果正在删除所有脚本语言,我建议安装ActiveState Tcl包。在Perl Tkx模块文档的底部,您可能需要定义一个环境变量,以便Tkx可以找到ActiveTcl库。我喜欢8.6版本的Ttk(主题Tk),它使Perl/Tk应用程序看起来像是Mac上的本地应用程序。它还为各种版本的Windows和Linux提供了主题。