在Perl Tk中使用TixGrid获取此错误:
tixGrid:mappedWindows not NULL
中止(核心转储)
TixGrid是版本4.010。
基本上发生的事情是TixGrid将所有映射的窗口存储在mappedWindows中,我假设它是基于我所做的一些搜索的链表。在销毁窗口时,无论是TixGrid窗口小部件还是主窗口,程序都会崩溃并发出此错误。我的猜测是因为TixGrid要求mappedWindows为NULL以便正确关闭,但代码中的错误在销毁小部件或主窗口时忘记使其为NULL。
我无法在线找到修复程序。我很担心,如果我继续没有找到解决方案,这可能会在几周内回到咬我的屁股。
任何人都知道修复或解决方法吗?
这是我用来测试TixGrid的一些简单代码,它提醒我错误。无论何时关闭主窗口或点击"关闭"按钮。在这段代码中,它是由关闭按钮销毁的主窗口,但如果你也销毁了TixGrid小部件,它会给出错误。
#!usr/bin/perl -w
use strict;
use Tk;
use Tk::TixGrid;
my $mw = MainWindow->new;
my $grid = $mw->Scrolled(
'TixGrid',
-background => "white"
)->pack;
my $button = $mw->Button(
-text=> => "Close",
-command => sub{$mw->destroy}
)->pack;
&packrow(0);
MainLoop;
sub packrow{
my $row = $_[0];
my $cb_state;
my $cb = $grid->Checkbutton(
-text => "Test",
-variable => \$cb_state,
-background => "white",
-activebackground => "white"
);
$grid->set($row,0, -itemtype=> 'window', -widget=> $cb,);
}

答案 0 :(得分:0)
如果有人考虑使用Tk::TixGrid
,因为他们无法让Tk::Table
一次删除整行,并且遇到Tk::TixGrid
问题,我建议您使用Tk::Table
并实现此处实现的行删除算法:
http://stackoverflow.com/questions/27136398/perl-tk-need-table-that-can-insert-other-widgets-and-delete-whole-rows