perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 22
Click for quality!




11.02.2012 / 18:09

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitrag"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

Beitragre: "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

Beitragre: "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

Beitragre: "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

Beitragre: "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

Beitragich 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

-






-
-