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

Perl Tk单选按钮标量变量捕获异常求助

Perl Tk单选按钮提交异常问题分析与解决

问题现象

点击Submit按钮后无法捕获单选按钮选中值,窗口保持活跃,同时触发以下错误:

Use of uninitialized value $fts in concatenation (.) or string at Tk_radio_menu.pl line 50.
Will store 
Tk::Error: Undefined subroutine &main::1 called at /usr/lib/x86_64-linux-gnu/perl5/5.34/Tk.pm line 251.
 Tk callback for .button
 Tk::__ANON__ at /usr/lib/x86_64-linux-gnu/perl5/5.34/Tk.pm line 251
 Tk::Button::butUp at /usr/lib/x86_64-linux-gnu/perl5/5.34/Tk/Button.pm line 175
 <ButtonRelease-1>
 (command bound to event)

错误原因

  1. 回调函数传递错误:-command => \&store_it($chosen) 会直接执行store_it($chosen)而非将其作为点击触发的回调。此时全局$chosen未初始化(foreach内的$chosen是局部变量,不影响全局),导致store_it接收到undef并输出警告;同时store_it无返回值(默认返回undef),Tk错误将其解析为子程序引用&main::1,引发未定义子程序错误。
  2. 缺少窗口关闭逻辑:Submit按钮的回调未调用窗口销毁方法,导致窗口持续活跃。
  3. 选中值传递错误:单选按钮绑定的变量是$determined,但代码试图传递无关的$chosen,无法获取正确选中值。
  4. Label组件创建错误:原代码$mw->label("Pick category.")不符合Tk组件命名规范(应为Label首字母大写)。

修正后的代码

use strict;
use Tk;
my $mw = MainWindow->new;

# 默认选中值
my $determined = 'games';

# 获取目录作为选项
my $dir_lib = '/usr/local/';
my @options = `ls $dir_lib`;
chomp @options;
s{^\s+|\s+$}{}g foreach @options;

$mw->title("Confirm Determination");
# 修正Label组件创建方式
$mw->Label(-text => "Pick category.")->pack;

# 创建单选按钮
foreach (@options) {
    $mw->Radiobutton(
        -text      => $_,
        -value     => $_,
        -variable  => \$determined,
        -justify   => 'left',
        -padx      => 30,
        -pady      => 10
    )->pack( -anchor => 'w' );
}

# 修正回调逻辑:点击时传递选中值并关闭窗口
$mw->Button(
    -text    => "Submit",
    -command => sub {
        my $selected_path = $dir_lib . $determined;
        store_it($selected_path);
        $mw->destroy;
    }
)->pack;

MainLoop;

sub store_it {
    my ($fts) = @_; 
    print "Will store $fts\n";
}

关键修改说明

  • 改用匿名子程序作为按钮回调,确保点击时才执行逻辑,避免提前调用store_it。
  • 在回调中通过单选按钮绑定的$determined获取选中值,拼接完整路径后传入store_it。
  • 调用$mw->destroy()实现点击Submit后关闭窗口。
  • 修正Label组件的创建语法,确保组件正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:45:35