Perl Tk有两种方法添加滚动条,一种是直接新建一个带滚动条的widget(方便一点,简单一点),一种是后期将滚动条attach上一个已经存在的widget上(功能强大,但相对麻烦),不过要注意的是要先pack scrollbar,然后再pack已存在的Widget,不然在调整窗口大小时,会出问题。下面是详细的:
1. 新建带滚动条的Widget,使用Scrolled方法
$widget = $parent->Scrolled('Widget', -scrollbars => 'string' [, options ] );
Widget具体可以取什么值...没怎么研究不过比如Text,Listbox,Entry之流应该是没有问题...这个还需要日后有具体需求的时候再深入研究呀...
上面的string取值可以是"n" , "s" , "e" , "w" ; or "on" , "os" , "oe" , "ow"或者其他的组合,"o"代表optional,其他的代表方向了,比如n代表水平方向,widget上方,这里要注意一点,"n"跟"s"不能同时使用...如:
# Create optional Scrollbars south (below) and east (right) of widget
$lb = $mw->Scrolled("Listbox", -scrollbars => 'osoe')->pack;
在建立之后,可以通过configure进行配置,如果想要将水平方向滚动条背景颜色设置为绿色,方法如下:
$lb->Subwidget("xscrollbar")->configure(-background => "green");
2.后期加入滚动条,可以新建Scrollbar,之后由相应的widget设定yscrollcommand或xscrollcommand添加。这里注意一点,Entry不支持y轴的,所以对于文字的,推荐使用Text Widget,具体如下:
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
my $text ="sdfsdf";
my $mw = new MainWindow;
$mw->geometry("320x480");
my $f = $mw->Frame(-relief=>"groove")->pack();
my $xscroll = $f->Scrollbar(-orient => 'horizontal');
my $yscroll = $f->Scrollbar( );
my $t = $f->Text(-yscrollcommand => ['set', $yscroll],
-xscrollcommand => ['set', $xscroll]);
$xscroll->configure(-command => ['xview', $t]);
$yscroll->configure(-command => ['yview', $t]);
$xscroll->pack(-side => 'bottom', -fill => 'x');
$yscroll->pack(-side => 'right', -fill => 'y');
$t->pack();
$t->tagConfigure('bold', -font => "Courier 24 bold");
$t->insert('end', "This is some normal text/n");
MainLoop;
上面只是最基本的应用,强大的Tk还有提供更多的功能,比如设定apperence,Callback,等等等等,想深入了解的,推荐Mastering Perl/Tk.