You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mac下使用Perl & Ttk实现键盘触发时GUI按钮闪烁效果

我当前的运行环境为macOS v10.13.6,使用Perl v5.28、Tkx.pm v1.10搭配ActiveState Tcl/TTk v8.6.9(aqua风格)。下方演示代码已实现预期功能:既可以通过鼠标点击GUI按钮调用指定子程序,也可以通过输入普通文本字符的键盘操作触发调用。

我现在希望新增一个特性:当使用键盘替代方式激活按钮时,能够给出图形按钮被按下(闪烁)的视觉反馈。我已经找到了看起来可行的Tcl解决方案,用到了event generate命令,也查到了Perl中对应的Tkx::event_generate()虚拟事件方法调用,甚至找到了Perl中等效的Tkx::after(100)函数调用来实现建议的延迟效果,但我不清楚该如何将这些内容整合到一起实现预期效果。希望能得到相关帮助,同时我也了解和其他部分TTk特性一样,该功能可能在Mac系统上无法生效。

代码示例
#!/usr/bin/env perl
# -*- cperl -*-

use warnings;
use strict;
use Tkx; $Tkx::TRACE = 1;
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 { print(STDERR "--> [ Hello, world ] pressed\n") }

my $b = $mw->new_ttk__button
  (
         -text => "Hello, world",
    -underline => 0,
      -command => sub { greeting() }
  );

$mw->g_bind('<h>', sub { $b->invoke() });
$mw->g_bind('<H>', sub { $b->invoke() });
$l->g_pack();
$b->g_pack();
Tkx::MainLoop();

print(STDERR "Program exit...\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...

内容的提问来源于stack exchange,提问作者KillerRabbit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 08:36:04