Perl[Tk] 实时读入数据到表格

Posted Perl程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl[Tk] 实时读入数据到表格相关的知识,希望对你有一定的参考价值。

Perl[Tk] 实时读入数据到表格

摘要

如何实时从文本中读入数据到Tk的表格Table中?Tk::Table模块就是表格的类,利用它可以快速创建表格。

代码示例
  • 创建表格

  • 设置表头

  • 填充数据

  • 实时刷新

#!/usr/bin/perl 

use strict;

use warnings;

use Tk;

use Tk::Table;

my $cols = 3;

my $rows = 20;

 

 

my $inputfile="table_input.txt";

# ------------------------------------------------------------------------ 

 

# 

# create the main window and frame 

# 

my $mw = new MainWindow();

my $tableFrame = $mw->Frame(-borderwidth => 2,

                            -relief => 'raised')->pack;

# 

# allocate a table to the frame 

#创建表格 

my $table = $tableFrame->Table(-columns => $cols,

                               -rows => $rows,

                               -relief => 'solid');

# 

# column headings 

#设置表头 

open FH,"$inputfile" or die "cannot find input file";

my @text=<FH>;

close(FH);

my @headers=$text[0]=~/(\S+)/g;

 

foreach my $c ( 1 .. $cols) {

        my $hdr = shift @headers;

        my $tmp = $table->Label(-text => $hdr,

                                -width => 20,

                                -relief => 'solid'

                               );

        $table->put( 0, $c$tmp );

}

# 

# populate the cells and bind an action to each one 

#填充表格 

foreach my $r ( 1 .. @text-1 )

{

        my @elements=$text[$r]=~/(\S+)/g;

        foreach my $c ( 1 .. $cols )

        {

 

                my $data = shift @elements;

                my $tmp = $table->Label(-text => $data,-relief => 'groove');

                $table->put( $r$c$tmp );

        }

}

$table->pack( -expand => 'yes', -fill => 'both');

 

#update the table every 5 seconds 

#刷新表格 

my $sec_tab=5*1000;

sub updateTable 

{

    my $file=shift @_;

    open FH,$file or die "no file find\n";

    my @text=<FH>;

    foreach my $r ( 1 .. @text-1 )

    {

        my @elements=$text[$r]=~/(\S+)/g;

        foreach my $c ( 1 .. $cols )

        {

 

                my $data = shift @elements;

                my $tmp = $table->Label(-text => $data,-relief => 'groove');

                $table->put( $r$c$tmp );

        }

    }

   # $table->update();  #not need 

}

my $table_id = $table->repeat($sec_tab,sub{&updateTable($inputfile)});

 

my $sec_file=5*60*1000;

sub exec_cmd 

{

    #system("1.exe") 

    print "hello,world\n";

}

my $file_id = $mw->repeat($sec_file,sub{&exec_cmd()});

 

MainLoop();

代码解析

刷新数据,使用了repeat函数。
widget.repeat(time,callback)
perl 中的函数延迟调用,使用sub封装下就可以达到目的。 每隔time的时间(单位是ms),调用一次回调函数。


以上是关于Perl[Tk] 实时读入数据到表格的主要内容,如果未能解决你的问题,请参考以下文章

在 Perl 脚本中将电子表格文件读入数据库

Perl学习15之perl读excel表格

如何有条件地将 C 代码片段编译到我的 Perl 模块?

使用 destroy() 命令时的 Perl/Tk 内存泄漏

Perl-Tk教程之小部件 - 框架文本入口按钮标签

在tk或者wxpython中,怎样将数据库查询的数据用表格显示出来,具体代码怎么写