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,里面的代码如下:
 1 sub ToolLabel {
 2     my $self = shift;
 3     my $l = $self->{CONTAINER}->Label(@_);
 4     push @{$self->{WIDGETS}} => $l;
 5     $self->_packWidget($l);
 6     return $l;
 7 }
对比其他的几个sub,我可以很肯定,只要将第四行中的Label改成BrowseEntry就可以了,这里缺少的一行是关于tip的,对于BrowseEntry来说,没有必要。
第二个是DateEntry。就是一个日期选择器,很多时候我们会用到它。我再使用的时候发现了一个问题,就是在显示月份的地方,出现了乱码,打开DateEntry.pm一看,找到如下一段:
1     my $monthlabel = (defined &strftime
2               ? strftime($w->cget('-headingfmt'),0,0,0,1,
3                      $w->{_month}-1,$w->{_year}-1900)
4               : $w->{_month} . "/" . $w->{_year}
5              );
显然,它是用了strftime这个函数,去除选择,直接用冒号后的形式即可。
还有,如何让在日期控件中的日期按钮被按下的时候响应一个事件。作为一般的控件这是一个必要的功能,但是在DateEntry中却没有,查看了源代码,原来是回调了用于更新标签和关闭的selectDay函数。这么作是很不负责任的,如果不修改源代码,我们就不得不在此控件旁添加一个按钮用于触发事件,这样一来不美观,而来更重要的是不符合一般的使用习惯。为此需要在ConfigSpec中添加一个-btncommand的标签,并在selectDay中回调。


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



标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
 
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
 
相关链接:



<2006年10月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(3)

随笔分类(99)

随笔档案(82)

相册

搜索

最新评论

阅读排行榜

评论排行榜