加载中…
个人资料
昕-2008
昕-2008
  • 博客等级:
  • 博客积分:0
  • 博客访问:4,224
  • 关注人气:73
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【perl】Tk模块的一个实例——从界面进行文件的输入和输出

(2013-10-28 11:10:13)
标签:

perl

界面

tk

中文乱码

输入输出

分类: perl笔记
    perl的界面一直都挺有兴趣的,但是之前没有界面也没什么太大的使用上的不便,这个事情就一直搁置到现在,最近仔细研究了一下。现在终于可以通过界面用鼠标来选择输入和输出文件了(主要使用Tk模块来实现)。同时解决了Tk模块中中文乱码的问题(使用Encode模块来实现)。代码如下(windows环境下):

#!/usr/bin/perl -w
use strict;

#####################
#
#一个输入,一个输出
################################
use Tk;  #加载模块
use Encode qw/encode decode/;

my $mw = MainWindow->new;  #新建主窗口
$mw->geometry("350x160");  #设置主窗口大小
my $title = '输入&输出';  #主窗口的标题
chinese($title);  #使用中文解码,子程序在下面
$mw->title("$title");  #在主窗口中显示标题
my $frame1 = $mw->Frame->pack(-ipadx => 50, -side => "left", -fill => "y");  
#在主窗口建一个框架
my $frame2 = $mw->Frame->pack(-ipadx => 50, -side => "right", -fill => "y");  
#在主窗口建第二个框架,两个框架将主窗口一分为二。


my $input_t = '输入文件';  #这些都是下面按钮上的文字
my $output_t = '输出文件';
my $bun = '请选择';
my $ok = '确定';

chinese($input_t);  #中文解码,这样才能正常显示
chinese($output_t);
chinese($bun);
chinese($ok);

$frame1->Label(-text => "$input_t")->pack(-side => "left");  #在框架1中设置标签
my $button1 = $frame1->Button(-text => "$bun", -command => \&button_input, -bg => "green")->pack(-side => "left");  
#在框架1中设置按钮,-command表示点击按钮时触发的动作,见下面的子程序button_input
$frame2->Label(-text => "$output_t")->pack(-side => "left");
my $button2 = $frame2->Button(-text => "$bun", -command => \&button_output, -bg => "green")->pack(-side => "left");
my $button3 = $frame2->Button(-text => "$ok", -command => [$mw => 'destroy'])->pack(-side => "bottom");
MainLoop;  #界面部分完毕
my ($input_mw,$output_mw);
sub button_input {
    my $file = $mw->getOpenFile( );  #得到输入文件的路径
    $file = encode("euc-cn",$file);  #对路径进行中文编码
    $input_mw = $file;  
#这里得到了输入文件的路径,并赋值给$input_mw,
#因此这个子程序需要放在前面,后面才能使用$input_mw来表示输入路径
    print "Your input file's "."$file\n";

}
sub button_output {  
    my $file = $mw->getSaveFile( );  #得到输出路径
    $file = encode("euc-cn",$file);
    $output_mw = $file;
    print "Your output file's "."$file\n";
}

sub chinese {  #上面用来设置中文解码的子程序
    $_[0]=decode("euc-cn",$_[0]);
}

my $input = $input_mw;  
#得到输入文件的路径,跟我们直接使用$input = 'D:\test\test.txt';是等效的。
my $output = $output_mw;  #得到输出文件的路径



这里有一篇很好的Tk模块的入门文章:


以上为原创,转载请注明。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有