Perl Tk::Date - 按周切换

标签 perl date user-interface tk-toolkit perltk

我正在编写一个 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');

这让我可以使用向上和向下箭头来增加/减少天数、更改月份和年份。 enter image description here

我希望在每周 GUI 中做的是有一个仅按周切换的向上和向下箭头。例如,本周为“11 月 4 日星期一至 11 月 8 日星期五”,下周为“11 月 11 日星期一至 11 月 15 日星期五”

我希望能够前进和倒退几年。

是否有一种简单的方法可以在 perl-Tk::Date 或 Date::Entry 中执行此操作?

最佳答案

Tk::DateTk::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 值。

关于Perl Tk::Date - 按周切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19860049/

相关文章:

perl - 如何将perl对象直接插入mongodb?

java - Swing Ui 倍增面板重影

objective-c - 使用 NSOutlineView 呈现数据树?

php - 选择比当前日期早 x 天的记录

php - 按修改日期的 SQL 行总和

java - 如何使用 Clojure 的 Java GUI 设计器?

jquery - 执行 perl 时出现“$' gets converted to ' 2918 1174 2918”

perl - 如何(如果可能)为特定闭包设置断点?

windows - Perl:在 Windows 上以不同颜色显示 STDOUT 和 STDERR

javascript - MomentJS 返回每月 1 号的模糊日期