2

さまざまな測定が毎週行われたかどうかを監視する 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 日月曜日 - 11 月 8 日金曜日」、来週は「11 月 11 日月曜日から 11 月 15 日金曜日」になります。

何年も前に行ったり後ろに行ったりできるようになりたいです。

perl-Tk::Date または Date::Entry でこれを行う簡単な方法はありますか?

4

1 に答える 1

2

Tk::Date箱から出してこれをTk::DateEntry行うことはできません。を使用Tk::Dateすると、次のアプローチを提案できます。

  • -varfmt => 'unixtime'の代わりに使用してください。後者は、後で使用する呼び出しdatehashではうまく機能しないためです。->configure(-value => ...)
  • -editable=>0によって作成されたすべての矢印ボタンを削除するように設定Tk::Date
  • inc/dec ボタンを自分で作成する
  • を使用して日付計算を行いますDateTimeincweekサブルーチンはこちらを参照)

次のようなものが機能する可能性があります。

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 値に簡単に変換できることに注意してください。

于 2013-11-08T15:45:01.793 に答える