问题描述
||
我想为我的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 (将#修改为@)