perl - 为什么 Tk Canvas 这么慢?

标签 perl tk

我使用 Perl 和 TK 编写了元胞自动机(Conway's Game of Life),只是为了好玩和练习。它适用于控制台输出。当我使用 TK 时,在第一个版本中,我只是删除并添加新单元格(矩形),大约 100 步后,我的程序变慢了(大约 10 倍)。然后我重写了图形部分:最初制作了所有 2500 个单元格(50x50),然后更改它们的颜色而不是添加/删除它们。但是在 600-700 步之后,我重新设计的自动机也开始变慢了。

这是 TK 的一个特性/错误还是我做错了什么?

通过标签改变颜色:

$canvas->itemconfigure("cell"."$x $y", -fill=>'blue');

创建网格:
for($y = 0; $y < 50; $y++)
{
    for($x = 0; $x < 50; $x++)
    {
        $canvas->createRectangle($x * 10, $y * 10, ($x + 1) * 10, ($y  + 1) * 10, -fill=>'white', -tags=>["cell"."$x $y"]);
    }
}

开始和停止循环:
sub start
{
    $repeat = $MainWindow->repeat($speed, sub{&maketurn;});
    # Function "maketurn" is not important, it is a simple counting of "alive" cells
    # and changing color by tag
}

sub stop
{
    if(defined($repeat))
    {
        $repeat->cancel();
    }
}

最佳答案

我发现一篇关于 tk Canvas 小部件的文章在许多项目中都很慢。该问题听起来与您的问题非常相似:

http://code.activestate.com/lists/perl-tk/17282/

解决方案可能是使用 tk 照片小部件,它的行为很像位图。调整您的代码会有点痛苦,但似乎 Canvas 小部件对于许多对象来说本质上很慢。

关于perl - 为什么 Tk Canvas 这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13925920/

相关文章:

tkdiff 如何忽略行尾

regex - Perl 正则表达式多重匹配

arrays - Perl 中的 HashMap

R tkrplot 布局问题

python-3.x - Python Tkinter GUI 与 PyQT 的内存节省

Tkinter 网格几何管理器大小传播(带粘性)

multithreading - 在 Irssi 中使用 PERL 进行线程化

mysql - Perl:如何将某个 MySQL 表视为 utf8

linux - 如何在 Linux 中使用 CUPS 从打印机获取文件打印作业的响应给用户