gyn

Win32下的Perl,无用的select,停滞的Tk,结束吧....

修改pTk组件两则小记(ToolBar, DateEntry)

这里讲的两个都是非标准组件,所以一般都是建立在标准的   pTk   组件之上的,由纯   perl   代码写成的,因此也便于修改。  

第一个是   ToolBar   ,就是文件浏览器中的在菜单栏之下的,一般叫工具栏。   pTk   中的   ToolBar   标准支持   Button     Label     LabEntry     OptionMenu   和自带的一个   separator   (这个还是很有用的)。如果要加入其他的组件,比如   BrowseEntry     pack   之后会被   ToolBar   放到工具栏的第二行上,很不方便。现在我们来看看   ToolBar.pm   ,里面到底是怎么处理标准支持的。搜索到   ToolLabel     sub   ,里面的代码如下:  

sub ToolLabel {

   my $self = shift;

   my $l = $self->{CONTAINER}->Label(@_);

   push @{$self->{WIDGETS}} => $l;

   $self->_packWidget($l);

   return $l;

}

对比其他的几个   sub   ,我可以很肯定,只要将第四行中的   Label   改成   BrowseEntry   就可以了,这里缺少的一行是关于   tip   的,对于   BrowseEntry   来说,没有必要。  

第二个是   DateEntry   。就是一个日期选择器,很多时候我们会用到它。我再使用的时候发现了一个问题,就是在显示月份的地方,出现了乱码,打开   DateEntry.pm   一看,找到如下一段:  

my $monthlabel = (defined &strftime

         ? strftime($w->cget('-headingfmt'),0,0,0,1,

                $w->{_month}-1,$w->{_year}-1900)

         : $w->{_month} . "/" . $w->{_year}

        );

显然,它是用了   strftime   这个函数,去除选择,直接用冒号后的形式即可。  

还有,如何让在日期控件中的日期按钮被按下的时候响应一个事件。作为一般的控件这是一个必要的功能,但是在   DateEntry   中却没有,查看了源代码,原来是回调了用于更新标签和关闭的   selectDay   函数。这么作是很不负责任的,如果不修改源代码,我们就不得不在此控件旁添加一个按钮用于触发事件,这样一来不美观,而来更重要的是不符合一般的使用习惯。为此需要在   ConfigSpec   中添加一个   -btncommand   的标签,并在   selectDay   中回调。  


posted on 2008-09-02 08:11 gyn_tadao 阅读(355) 评论(0)  编辑 收藏 引用 所属分类: perl

只有注册用户登录后才能发表评论。
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(15)

随笔分类(126)

随笔档案(108)

相册

搜索

最新评论

阅读排行榜

评论排行榜