这里讲的两个都是非标准组件,所以一般都是建立在标准的
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
中回调。