我正在编写一个GUI,它将监视是否每周进行各种测量。我编写了各种其他GUI,以便每天将测量结果更新到数据库中。这些GUI使用Tk::Date datewidget,它允许我按天切换。
my $datewidget = $f_filter->Date(-choices=>'today', -datefmt=>'%2d %2m %4y',
-fields=>'date', -varfmt=>'datehash',
-monthmenu=>1, -allarrows=>1,
-value=>'now', -command=>\&populate)->pack(-side=>'left');这允许我使用上下箭头来增加/减少天数,更改月份和年份。

我想在每周GUI中做的是有一个上下箭头,只在周内切换。本周将是“11月4日至8日星期五”,下周“11月11日至15日星期五”。
我希望能够前进和倒退几年。
在perl::Date或Date:Entry中,有简单的方法可以做到这一点吗?
发布于 2013-11-08 15:45:01
Tk::Date和Tk::DateEntry不能开箱即用。使用Tk::Date,我可以提出以下方法:
-varfmt => 'unixtime'而不是datehash,因为后者不能很好地处理稍后使用的->configure(-value => ...)调用-editable=>0以删除Tk::Date创建的所有箭头按钮DateTime进行日期计算(请参阅此处的incweek子程序)类似于以下内容的方法可能会奏效:
use strict;
use Tk;
use Tk::Date;
my $mw = tkinit;
my $datewidget = $mw->Date(-choices=>'today', -datefmt=>'%2d %2m %4y',
-fields=>'date', -varfmt=>'unixtime',
-editable=>0,
-monthmenu=>1,
-value=>'now',
-command=>sub { warn "populate @_" })->pack(-side=>'left');
my $arrowframe = $mw->Frame->pack(-side => 'left');
{
no warnings 'once'; # because of INCBITMAP/DECBITMAP
$arrowframe->FireButton(-bitmap => $Tk::FireButton::INCBITMAP, -command => sub { incweek(+1) })->pack(-side => 'top');
$arrowframe->FireButton(-bitmap => $Tk::FireButton::DECBITMAP, -command => sub { incweek(-1) })->pack(-side => 'top');
}
MainLoop;
sub incweek {
my($inc) = @_;
use DateTime;
my $epoch = $datewidget->get;
my $dt = DateTime->from_epoch(epoch => $epoch);
$dt = $dt->add(weeks => $inc);
$datewidget->configure(-value => $dt->epoch);
}
__END__注意,$datewidget->get现在返回了划时代的时间,但是使用DateTime,您可以轻松地将其转换为y/m/d值。
https://stackoverflow.com/questions/19860049
复制相似问题