#!/usr/bin/perl use warnings; use strict; use Tk; package Window; sub new { my $classname = shift; my $self = {timerstart => 3}; return bless($self, $classname); } sub showWindow { my $self = shift; $self->{timer} = $self->{timerstart}; $self->{mw} = MainWindow->new(); $self->{mw}->optionAdd("*font", "Arial 12 normal"); $self->{mw}->title("Timer"); $self->{mw}->geometry("+416+347"); $self->{mw}->bind('', sub { $self->{mw}->destroy() }); $self->{lab} = $self->{mw}->Label(-text => $self->{timer}); $self->{lab}->pack(-padx => 20, -pady => 20); $self->{fr1} = $self->{mw}->Frame(); $self->{btn_start} = $self->{fr1}->Button(-text => "Start", -command => sub { $self->start() }); $self->{btn_start}->pack(-side => "left", -padx => 50); $self->{fr1}->pack(); $self->{mw}->MainLoop(); } sub start { my $self = shift; if ($self->{timer} < $self->{timerstart}) { return; } $self->{mw}->after(100, sub { $self->doTimer() }); } sub doTimer { my $self = shift; $self->{timer} -= 0.1; $self->{timer} = sprintf("%.1f", $self->{timer}); $self->updateLabel($self->{timer}); if ($self->{timer} > 0) { $self->{mw}->after(100, sub { $self->doTimer() }); } else { $self->updateLabel("Timer abgelaufen"); $self->{timer} = $self->{timerstart}; } } sub updateLabel { my $self = shift; my $text = shift; $self->{lab}->configure(-text => $text); } package main; my $w = Window->new(); $w->showWindow();