Tk::HList - Hierarchische Liste

Tk::HList dient der Darstellung hierarischer Daten. Das muss nicht zwangsläufig nur ein Baum sein, sondern es kann auch eine Tabelle sein. Dabei enthält jede Zeile mehrere Kindelemente.


Hierarchische Liste mit Tk::HList

  1. #!perl
  2. use strict;
  3. use warnings;
  4. use utf8;
  5. use Tk;
  6. use Tk::HList;
  7. my $mw = tkinit();
  8. my $hlist = $mw->HList->pack(-fill => 'x');
  9. foreach (qw/1 1.1 1.2 haus haus.eingang haus.türe haus.dach/) {
  10. $hlist->add($_, -text => $_);
  11. }
  12. $mw->MainLoop();

Tabellarische Liste mit Tk::HList

  1. #!perl
  2. use strict;
  3. use warnings;
  4. use utf8;
  5. use Tk;
  6. use Tk::HList;
  7. =comment
  8. Dieses Skript demonstriert eine HList mit Widgets als Element
  9. in einer Zeile. Das Beispiel zeigt, dass auch etwas anderes als
  10. reiner Text in eine HList eingefügt werden kann.
  11. =cut
  12. my $mw = MainWindow->new();
  13. my $hlist = $mw->Scrolled(
  14. 'HList',
  15. -scrollbars => 'osoe',
  16. -columns => 3,
  17. -header => 1,
  18. -width => 100,
  19. -height => 30,
  20. )->pack();
  21. $hlist->header(
  22. 'create',0,
  23. -text => 'Name',
  24. );
  25. $hlist->header(
  26. 'create',1,
  27. -text => 'Nummer',
  28. );
  29. $hlist->header(
  30. 'create',2,
  31. -text => 'Wohnort',
  32. );
  33. my $entry_name = $hlist->Entry(-text => 'Name suchen...');
  34. my $entry_number = $hlist->Entry(-text => 'Nummer suchen...');
  35. my $entry_place = $hlist->Entry(-text => 'Ort suchen...');
  36. $hlist->add(0);
  37. $hlist->item('create',0, 0, -window => $entry_name, -itemtype => 'window');
  38. $hlist->item('create',0, 1, -window => $entry_number, -itemtype => 'window');
  39. $hlist->item('create',0, 2, -window => $entry_place, -itemtype => 'window');
  40. $hlist->add(1);
  41. $hlist->item('create',1, 0, -text => 'Otto');
  42. $hlist->item('create',1, 1, -text => '04545-25455');
  43. $hlist->item('create',1, 2, -text => 'Berlin');
  44. $hlist->add(2);
  45. $hlist->item('create',2, 0, -text => 'Hans');
  46. $hlist->item('create',2, 1, -text => '04539-49448');
  47. $hlist->item('create',2, 2, -text => 'Frankfurt');
  48. $mw->MainLoop();

Schwarzen Rahmen verstecken

Standardmäßig ist die HList von einem schwarzen Rahmen umgeben, wenn sie den Fokus erhält (z.B. wenn man drauf klickt). Dieser Rahmen kann mit der Option -highlightthickness gesteuert werden. Der Wert 0 versteckt den Rahmen.

HList ohne schwarzen Rahmen

  1. #!perl
  2. use strict;
  3. use warnings;
  4. use utf8;
  5. use Tk;
  6. use Tk::HList;
  7. my $mw = tkinit();
  8. # -- create a Tk::HList
  9. my $scrolled_hlist = $mw->Scrolled('HList',
  10. -scrollbars => 'se',
  11. -columns => 2,
  12. -header => 1,
  13. -width => 50,
  14. -height => 20,
  15. # hide black border around HList when it's active
  16. -highlightthickness => 0,
  17. -selectborderwidth => 1,
  18. -selectmode => 'single',
  19. )->pack(-fill => 'y', -expand => 1,);
  20. my $real_hlist = $scrolled_hlist->Subwidget('scrolled');
  21. $real_hlist->configure(
  22. -browsecmd => [ sub{ $_[0]->anchorClear(); }, $real_hlist],
  23. );
  24. # -- add HList header colums
  25. $real_hlist->header(
  26. 'create', 0,
  27. -text => 'first column',
  28. );
  29. $real_hlist->header(
  30. 'create', 1,
  31. -text => 'second column',
  32. );
  33. # -- add some entries to the HList
  34. $real_hlist->add(1);
  35. $real_hlist->item('create', 1, 0, -text => 'first row, 1st col');
  36. $real_hlist->item('create', 1, 1, -text => 'first row, 2nd col');
  37. $real_hlist->add(2);
  38. $real_hlist->item('create', 2, 0, -text => '2nd row, 1st col');
  39. $real_hlist->item('create', 2, 1, -text => 'second row, 2nd col');
  40. # -- set selection *** without dashed line border ***
  41. $real_hlist->selectionSet(2);
  42. $mw->MainLoop();
  43. exit(0);

Selektierte Einträge anzeigen

Die Einträge der HList, die vom Benutzer ausgewählt wurden, können über die info-Methode abgerufen werden.

  1. #!perl
  2. use strict;
  3. use warnings;
  4. use utf8;
  5. use Tk;
  6. use Tk::HList;
  7. use Data::Dumper qw/Dumper/;
  8. my $mw = tkinit();
  9. # -- create a Tk::HList
  10. my $scrolled_hlist = $mw->Scrolled('HList',
  11. -scrollbars => 'se',
  12. -columns => 2,
  13. -header => 1,
  14. -width => 50,
  15. -height => 20,
  16. -selectmode => 'extended',
  17. )->pack(-fill => 'both', -expand => 1,);
  18. my $real_hlist = $scrolled_hlist->Subwidget('scrolled');
  19. # -- configure callback to show the currently selected items
  20. $real_hlist->configure(-browsecmd => sub{
  21. my @selected_items = $real_hlist->info('selection');
  22. print Dumper \@selected_items;
  23. },);
  24. # -- add HList header colums
  25. $real_hlist->header(
  26. 'create', 0,
  27. -text => 'first column',
  28. );
  29. $real_hlist->header(
  30. 'create', 1,
  31. -text => 'second column',
  32. );
  33. # -- add some entries to the HList
  34. $real_hlist->add(1);
  35. $real_hlist->item('create', 1, 0, -text => 'first row, 1st col');
  36. $real_hlist->item('create', 1, 1, -text => 'first row, 2nd col');
  37. $real_hlist->add(2);
  38. $real_hlist->item('create', 2, 0, -text => '2nd row, 1st col');
  39. $real_hlist->item('create', 2, 1, -text => 'second row, 2nd col');
  40. $real_hlist->add(3);
  41. $real_hlist->item('create', 3, 0, -text => '3rd row, 1st col');
  42. $real_hlist->item('create', 3, 1, -text => 'third row, 2nd col');
  43. # -- set selection *** without dashed line border ***
  44. $real_hlist->selectionSet(2);
  45. $mw->MainLoop();
  46. exit(0);
Top