图形化与Tk
1. GD模块:创建简单的几何图形
#! c:/perl/bin/perl
# fig21_01.pl
use GD;
use warnings;
use strict;
my $image = new GD::Image(320,320); #创建一个GD图像对象。并且传入需要建图象的宽度和高度值(单位象素点)。
#X坐标值沿图像从左向右增加;Y坐标值沿图像从顶向下增加。
#-----------定义颜色------------------------------
my $white = $image -> colorAllocate (255,255,255); #colorAllocate方法的传入参数为red、green和blue的值,
my $red = $image -> colorAllocate (255,0,0); #然后对三种颜色进行调和得到需要的颜色。
my $greed = $image -> colorAllocate (0,255,0); #GD模块使用RGB颜色规则,规则中红、绿、兰部分都用了
my $blue = $image -> colorAllocate (0,0,255); #0~255中的一个整数值表示。通过每个数值变化对颜色进。
my $black = $image -> colorAllocate (0,0,0); #行调和,得到需要的颜色,如同调色板。
my $purple = $image -> colorAllocate (255,0,255);
#----------定义图形------------------------------
$image -> filledRectangle (15,15,150,150,$red); #创建预定义的多边形。前两个参数定义矩形的一个角坐标,
#第三和第四参数定义了沿对角线的另一个角坐标值。
#第五个参数为颜色参数。
$image -> arc (200,200,50,50,0,360,$black); #arc方法建立一个圆。前两个参数为中心坐标,后面两个为圆的水平半径和垂直半径。再后面的维圆弧的角度边界。最后一个是颜色参数。 #注意:arc并不填充颜色,fill方法进行颜色填充。
$image -> fill (200,200,$blue); #前两个参数定义一个像素点,绘制的时候从该点向外进行,直到找到一个与起始像素有不同颜色值的像素为止。
$image -> rectangle (100,100,200,125,$green); #创建空的矩形,不填充颜色,使用下面的fillToBorder填充。
$image -> fillToBorder (150,110,$green,$green); #这个方法可以用于边界参数范围内的填充。参数与fill方法基本相同,只是在颜色的前面增加了一个边界颜色的参数。
#---------Polygon类-----------------------------
my $polygon = new GD::Polygon(); #建立一个polygon类的实例。
$polygon = addPt(20,300); #确定多边形的3个点。
$polygon = addPt(20,175);
$polygon = addPt(100,175);
$image -> polygon ($polygon, $blue); #使用多边形对象和边界颜色将多边形加入图像中
$image -> fill(50.200,$purple); #向多边形填充颜色。
$polygon = setPt(0,30,300); #setPt方法的第一个参数是需要改变点的数量,程序中必须将
$polygon = setPt(1,110,300); #这个值的初值设置为0。最后两个参数是新点的x,y坐标。
$polygon = setPt(2,110,300);
$image -> filledPolygon($polygon,$black); #使用filledPolygon方法填充多边形的颜色。
#---------文件输出------------------------------
open (PICT,">fig21_02.png") or
die ("Can not open picture:$!");
binmode (PICT); #将输出模式设定为二进制模式,二进制模式中的图像存储时,包含这个图像的内存字节按图像本身的格式写入,而不是按开发平台的特定格式。
print (PICT $image ->png() ); #用png方法将图像转化成一个png格式的文件。
close (PICT) or die ("Can not close file: $!);
2. chart模块
perl提供了一个用于创建定制图表的模块,模块的名字叫做Chart。它的扩展模块包括Chart::Lines(折线图)、Chart::Bars(棒图或直方图)以及Chart::Points(点图)等等。
#!c:/perl/perl.exe
#fig21_05.pl
#using the Chart module
use strict;
use warnings;
use Chart::Lines; #引入模块Chart::Lines来产生折线图
my $line = new Chart::Lines();
#创建一个折线图对象
my $file = "fig21_05.png";
#$file容纳输出文件的名字
my @lables = ("first","second");
#容纳数据集的名称
my %colors = ("dataset0" => [100,100,255],
"dataset1" => [255,100,100],
"background" => [150,235,200]);
#将图表的一个区域映射成有3个RGB颜色值确定的一种颜色。
#如此操作是为了更容易进行修改
$line -> set ( "title" => "Test Chart", "x_label" => "letter");
#set方法要求接收采用“键-值”对的形式,其中键表示想要设置什么,而“值”对应于那个键指定的新值
#这一行是改变图表的标题和X标签
$line -> set ( "y_label" => "number", "legend" => "left");
#这行改变图表Y的标签和图例放置的位置
$line -> set ( "legend_labels" => /@labels, "colors" => /%colors );
#这行将图例标签放入@labels数组中,同时也将颜色放入%colors中
$line -> set ( "grey_background" => 0 );
#这一行是为了使图形的背景色不是暗灰色
my @Xlabels = ( 'a', 'b', 'c', 'd' );
#定义x轴上的标签值
my @dataset1 = ( 1,2,3,4 );
#定义数据
my @dataset2 = ( 2,3,5,9 );
#定义数据
3. TK概述
u Tk应用在事件句柄循环里,事件句柄循环用来截取发生的用户交互(或事件)。事件可以是鼠标的点击、键盘击键或者任何其它可能发生的事件。事件发生时,事件句柄循环就能接收这一事件,然后“唤醒”可以用来处理这个事件的函数。
u 一个基本Perl/Tk程序的第一步就是创建一个主窗口。主窗口用下面的语句创建:
$main = new MainWindowt();
u 这个语句调用Tk的MainWindow构建函数来创建一个新的窗口,然后用变量$main引用一个MainWindow对象。
u 创建GUI组件时需要配置这些组件,即指定他们的类型、在何处放置等。并在程序段的最后将GUI组件置于窗口中,如果不这样做,组件就不会显示出来。
u 生成了窗口及GUI组件,并将组件显示到窗口之后,就该执行最后一步,即开始处理窗口事件。函数调用MainLoop();可打开所有的主窗口,以使用户与之交流。函数MainLoop应该是程序的最后一个语句,这是为了保证在窗口显示之前,主窗口和主窗口内的组件得到配置,否则,这些组件不会在窗口中正确显示。
u Tk的Label方法可以创建一个标签组件。
u Tk的Button方法可以创建一个按钮组件。
u 回调是规定了事件响应中需要执行行动的函数。
u Tk的pack方法可以将组件放置到窗口合适的位置处。缺省行动是将第一个组件置于窗口顶部,第二个组件位于它的下方,一次类推。
u Tk的ListBox方法可创建一个列表组件。
u TK的TopLevel方法可以创建一个新的的顶级窗口
u Tk的bind方法用GUI组件事件连接回调函数。
u Tk的Tadiobutton方法可创建一个单选按钮组件。
u Tk的Scale方法创建一个标尺组件,标尺组件有许多用户化的属性,例如标尺的范围,标尺上标点的距离以及窗口中标尺的长度。
u Tk的Frame方法创建一个框架组件,这个GUI组件不仅可以包含其它组件,而且还能获得对其它组件布局的更多控制权。
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>