Posiadamy informacje o naszych pracownikach. Dostęp mamy do ich Numerów przydzielonych w trakcie procedury zatrudnienia. Pracownik podał swoje Nazwisko oraz Imię, a my przydzieliliśmy mu także stawkę osobistego zaszeregowania. Chcemy stworzyć strukturę która by sortowała pracowników po przydzielonym numerze. Dlatego wykonamy dwie czynności Cytat: 1) Budowa odpowiedniej struktury danych do przechowywania potrzebnych informacji 2) Zasilanie tej struktury 3) Budowa elementów prezentacyjnych z wykorzystaniem Tk
Budujemy strukturę danych danych oraz zasilamy ją informacjami
my (%pracownicy) = ();
%pracownicy = (
11 => [11,"Buraczek","Jan","1247,37 zł"],
17 => [17,"Kartofelek","Paweł","1248,22 zł"],
22 => [22,"Pietruszka","Agata","1578,98 zł"],
67 => [67,"Marchewka","Katarzyna","2178,56 zł"],
);
Jak widać zbudowaliśmy asocjację tablic, w której wpisaliśmy potrzebne informacje dla dalszej obróbki. Oczywiście może to być dowolna struktura. My wybraliśmy taką aby nie komplikować tematu. Następnie chcielibyśmy pokazać Naszych zatrudnionych pracowników w formie tabelarycznej. Dlatego dziś wykorzystamy z zasobów Tk moduł HList. Poniżej prezentujemy najważniejsze fragmenty z opisem.
#Deklaracja formatki
#ile kolumn, czy ma być nagłówek, rozszerzać się, jak pakować
my $hlist = $mw->HList(-columns => 4, -header => 1)
->pack(-expand => 1, -fill => 'both');
#Deklaracja nagłówków
$hlist->headerCreate(0, -text => "Numer");
$hlist->headerCreate(1, -text => "Nazwisko");
$hlist->headerCreate(2, -text => "Imię");
$hlist->headerCreate(3, -text => "Stawka");
#Teraz przejrzymy wszystkich pracowników,
#każdego po kolei
# i nastepnie wyświetlimy w kolumnach i wierszach
foreach my $pracownicy (sort keys %pracownicy) {
my $numer = $pracownicy{$pracownicy}[0];
my $nazwisko = $pracownicy{$pracownicy}[1];
my $imie = $pracownicy{$pracownicy}[2];
my $stawka = $pracownicy{$pracownicy}[3];
$hlist->add($pracownicy);
$hlist->itemCreate($pracownicy, 0, -text => $numer);
$hlist->itemCreate($pracownicy, 1, -text => sprintf "%s", $nazwisko);
$hlist->itemCreate($pracownicy, 2, -text => sprintf "%s", $imie);
$hlist->itemCreate($pracownicy, 3, -text => sprintf "%s", $stawka);
}
#a tutaj zakończymy
Jak widzimy możemy swobodnie wyświetlać swoje struktury danych, w komponentach Tk, i robiąc to minimalną ilością kodu. Plik z kodem źródłowym tk_table.zip dostępny jest tutaj.... Gdyby ktoś nie mógł go pobrać prezentujemy kod w całości poniżej. Życzymy udanych eksperymentów.
#!/usr/bin/perl
use warnings;
use strict;
use utf8;
require Tk;
use Tk;
use Tk::HList;
my $mw = MainWindow->new();
#tytuł formatki
$mw->title("Portal PerlGtk Was Wita");
#minimalna szerokość i wysokość podana w pikselach
$mw->minsize(qw(300 300));
#maksymalna szerokość i wysokość podana w pikselach
$mw->maxsize(qw(400 400));
#w którym miejscu na ekranie będzie wyświetlona podana w pikselach
$mw->geometry('+400+250');
#czy możemy rozciągać szerokość lub wysokość
#zmieniajcie z 1 na 0 i odwrotnie
$mw->resizable(1,1);
my (%pracownicy) = ();
%pracownicy = (
11 => [11,"Buraczek","Jan","1247,37 zł"],
17 => [17,"Kartofelek","Paweł","1248,22 zł"],
22 => [22,"Pietruszka","Agata","1578,98 zł"],
67 => [67,"Marchewka","Katarzyna","2178,56 zł"],
);
my $hlist = $mw->HList(-columns => 4, -header => 1)
->pack(-expand => 1, -fill => 'both');
$hlist->headerCreate(0, -text => "Numer");
$hlist->headerCreate(1, -text => "Nazwisko");
$hlist->headerCreate(2, -text => "Imię");
$hlist->headerCreate(3, -text => "Stawka");
foreach my $pracownicy (sort keys %pracownicy) {
my $numer = $pracownicy{$pracownicy}[0];
my $nazwisko = $pracownicy{$pracownicy}[1];
my $imie = $pracownicy{$pracownicy}[2];
my $stawka = $pracownicy{$pracownicy}[3];
$hlist->add($pracownicy);
$hlist->itemCreate($pracownicy, 0, -text => $numer);
$hlist->itemCreate($pracownicy, 1, -text => sprintf "%s", $nazwisko);
$hlist->itemCreate($pracownicy, 2, -text => sprintf "%s", $imie);
$hlist->itemCreate($pracownicy, 3, -text => sprintf "%s", $stawka);
}
MainLoop;
|