从tk :: menu小部件中删除子小部件/条目

问题描述

|| 我想为我的Perl / Tk程序实现一个历史/最近文件功能。 这是我的程序的工作代码摘录,以演示我的问题。
#!/usr/bin/perl 

use strict;
use warnings;
use English qw( -no_match_vars );

use Tk;

my @history_entries = qw(Back To The History);

my $mw      = MainWindow->new();
my $menubar = $mw->Menu();
$mw->configure( -menu => $menubar );
my $file    = $menubar->cascade( -label => \'~File\' );
my $history = $file->cascade( -label => \'~History\',);

build_history();

MainLoop();

#===  FUNCTION  ================================================================
#         NAME:  build_history
#      PURPOSE:  Polulate the history
#===============================================================================
sub build_history {
    foreach (@history_entries) {
        $history->command(
            -label    => $ARG,-command  => \\&some_function,-compound => \'left\',);
    }
    return;
}    # ----------  end of subroutine build_history  ----------
如您所见,这些条目是使用$ history-> command创建的,但是每次调用build_history时如何删除它们呢? 我要删除它们的原因是,每当用户打开文件时,都应删除最后一个项目(在本例中为“历史记录”),并将新项目放在列表的顶部。因此,在此示例中,我最多有四个条目。 欢迎使用Tk实现此功能的任何其他方式。 谢谢你的时间。 更新: 我遵循\“ mu \”的建议,并尝试在children()函数被调用之后立即获得subwidgets,如下所示:
my @child = $history->children();
foreach my $c ( @child ) {
    if ($c->Exists()){
        $c->destroy;
    }
}
程序退出并显示错误:
Can\'t locate object method \"children\" via package \"Tk::Menu::Cascade\" at /home/alex/Desktop/stack_history.pl line 28.
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)