|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
"Slect all "button
|
Seitenanfang |
Hallo, ich benutze Tk. ich habe ein fenster $mw, daraus bekomme ich einen Checkbox . wie könnte ich denn ein "select-all"_Button erzeugen. mir fehlt bis jetz keine idee wie ich realisieren kann?? kann jemand mir den Weg zeigen?danke
Datum: 29.05.2007-16:55

|
re: "Slect all "button
|
Seitenanfang |
| Push deine Checkboxes in ein Array (@checkboxes), binde eine Callback-Routine ('check_all()') an das 'ButtonPress'-Ereignis deines 'Select All'-Buttons. Wie man eine Callback-Routine an ein Widget bindet ist in Tk::bind nachzulesen, die Syntax
$widget->bind('<Ereignis>' => \&CallbackRoutine);
koennte im Code dann so aussehen
$button->bind('<ButtonPress>' => \&check_all);
In der Callback-Routine musst du nur noch das Checkboxen-Array durchlaufen und fuer jede Checkbox 'select' aufrufen.
sub check_all { for my $checkbox (@checkboxes) { $checkbox->select(); } }
-- Tk::Checkbutton Tk::bind
Datum: 30.05.2007-00:39

|
re: "Slect all "button
|
Seitenanfang |
ich habe es mit sowas versucht aber klappt es nicht.:-( ich habe bistimmt nicht gut verstanden denn wenn ich das Program ausführe ist schon alles gechekt und das button macht gar nix bitte was mache ich hier falsch#---select_all_Button - Checkframe--- $select_all = $f_check->Button( -text => "select all",) ->pack(-side => 'top', -padx => '0.5c'); $f_check->pack; $select_all->bind =>('<ButtonPress>'=> \&check_all(@program)); sub check_all() { my (@node_names) = @_; my $checkbox; for $checkbox (@node_names) { $checkbox->select(); } }
Datum: 30.05.2007-18:51

|
re: "Slect all "button
|
Seitenanfang |
$select_all->bind =>('<ButtonPress>'=> \&check_all(@program));
In dieser Zeile wird 'check_all' schon aufgerufen deshalb sind alle Checkboxen von Anfang an gecheckt.Diese Form '&check_all()' ist ein Subroutinenaufruf,a lso sobald du die runden Klammern hinter den Subroutinennamen setzt wird die Subroutine aufgerufen, wenn du der Callbackroutine Argumente mit uebergeben moechtest, dann so
$select_all->bind('<ButtonPress>'=> [\&check_all, @program]);
Statt der Codereferenz wird eine Arrayreferenz uebergeben, das Array enthaelt eine Codereferenz und die Argumente die beim Ausfuehren des Codes uebergeben werden sollen.... und '=>' hat hinter dem 'bind' nichts zu suchen ;)
Datum: 30.05.2007-21:57

|
re: "Slect all "button
|
Seitenanfang |
das funktioniert jetz gut. aber nur für einen CheckboxFenster und nicht für die anderen auch. weil es 5 bei mir sind hier hast du mein code kannst du mir bitte sagen was ich falsch mache? am ende kriege ich so einen Fehler wenn ich auf "select all" klicke das in das 2te,3te,4te und 5te Checkboxfenster.beim 1sten checkboxfenster funktioniert das optimal:Fehler: Tk::Error: Can't call method "select" on an undefined value at Install_Platform_V1.0.pl line 1111. [\&main::__ANON__] Tk callback for .toplevel.frame.button1 Tk::__ANON__ at C:/Win16App/Perl/site/lib/Tk.pm line 217 Tk::Button::butUp at C:/Win16App/Perl/site/lib/Tk/Button.pm line 111 (command bound to event) Code: sub do_top($) { my @node_values; my $button = shift; # input my @check_value = {}; my (@program, $f_check, @pa); my ($j, $i); my ($exit, $select_all); $continue = 0; $exit_state = $continue; $exits = 1; $problem = 2; if (! Exists($tl)) { # checkFrame @node_values = {}; $j = 0; $tl = $mw->Toplevel; $f_check = $tl->Frame(-relief => 'sunken', -borderwidth => '1m'); @pa = mark_children('Platform', 'Program', $button); for($i=0; $i<$count_program; $i++) { if ($pa[$i]== 1) { @node_values = StandLib::GetALLNodeValues('Program',$i); $check_value[$i]= 0; #---checkbuttons--- $program[$i] = $f_check->Checkbutton(-text => $node_values[1], -variable => \$checked_progs[$i]) ->pack(-side => 'top', -anchor => 'w', -padx => '1c'); } } #---done_Button im Checkframe--- $exit = $f_check->Button(-text => "done", -command => sub{$tl->destroy}) ->pack(-side => 'top', -padx => '0.5c'); $f_check->pack; #---select_all_Button - Checkframe--- $select_all = $f_check->Button( -text => "select all", -command => sub{&check_all(@program);}) ->pack(-side => 'top', -padx => '0.5c'); $f_check->pack; $select_all->bind =>('<ButtonPress>'=> \&check_all); } else { $tl->deiconify; $tl->raise ; # ignore Exceptions } return $exit_state }# sub do_top
Datum: 31.05.2007-16:32

|
ich habe die subfunktionvergessen!!die ist jetzt unten
|
Seitenanfang |
das funktioniert jetz gut. aber nur für einen CheckboxFenster und nicht für die anderen auch. weil es 5 bei mir sind hier hast du mein code kannst du mir bitte sagen was ich falsch mache? am ende kriege ich so einen Fehler wenn ich auf "select all" klicke das in das 2te,3te,4te und 5te Checkboxfenster.beim 1sten checkboxfenster funktioniert das optimal: Fehler: Tk::Error: Can't call method "select" on an undefined value at Install_Platform_V1.0.pl line 1111. [\&main::__ANON__] Tk callback for .toplevel.frame.button1 Tk::__ANON__ at C:/Win16App/Perl/site/lib/Tk.pm line 217 Tk::Button::butUp at C:/Win16App/Perl/site/lib/Tk/Button.pm line 111 (command bound to event)Code: sub do_top($) { my @node_values; my $button = shift; # input my @check_value = {}; my (@program, $f_check, @pa); my ($j, $i); my ($exit, $select_all); $continue = 0; $exit_state = $continue; $exits = 1; $problem = 2; if (! Exists($tl)) { # checkFrame @node_values = {}; $j = 0; $tl = $mw->Toplevel; $f_check = $tl->Frame(-relief => 'sunken', -borderwidth => '1m'); @pa = mark_children('Platform', 'Program', $button); for($i=0; $i<$count_program; $i++) { if ($pa[$i]== 1) { @node_values = StandLib::GetALLNodeValues('Program',$i); $check_value[$i]= 0; #---checkbuttons--- $program[$i] = $f_check->Checkbutton(-text => $node_values[1], -variable => \$checked_progs[$i]) ->pack(-side => 'top', -anchor => 'w', -padx => '1c'); } } #---done_Button im Checkframe--- $exit = $f_check->Button(-text => "done", -command => sub{$tl->destroy}) ->pack(-side => 'top', -padx => '0.5c'); $f_check->pack; #---select_all_Button - Checkframe--- $select_all = $f_check->Button( -text => "select all", -command => sub{&check_all(@program);}) ->pack(-side => 'top', -padx => '0.5c'); $f_check->pack; $select_all->bind =>('<ButtonPress>'=> \&check_all); } else { $tl->deiconify; $tl->raise ; # ignore Exceptions } return $exit_state }# sub do_top sub check_all(@) { my (@program) = @_; my $checkbox; for $checkbox (@program) { $checkbox->select(); } }
Datum: 31.05.2007-16:35

|
|

|

|

|
 |

|

|
|