Schrift
[thread]4836[/thread]

LISTBOX: alle Einträge aus-/abwählen ???: Button für ALLES AUS-bzw. ABWÄHLEN ???



<< >> 4 Einträge, 1 Seite
Gerry
 2004-09-04 14:31
#42661 #42661
User since
2004-08-18
26 Artikel
BenutzerIn
[default_avatar]
Im Anhang habe ich ein kleines Tk-Programm, mit dessen Hilfe ich eine LISTBOX fülle. Nach dem Füllen der LISTBOX kann ich einen oder mehrere Einträge auswählen und ausführen (der Code führt aber die in der LISTBOX markierten Programme noch nicht aus, das ist aber im moment nicht mein Problem).

Nach was ich suche ist eine Funktion, mit deren Hilfe ich die LISTBOX-Einträge nicht einzeln via MAUS-Taste markieren muss, sondern ein BUTTON, der mit dieser Funktion belegt ist.

Der Button "Alles auswählen" würde also ALLE Einträge in der LISTBOX markieren, so als wären sie mit der Maus markiert worden.
Der Button "Alles abwählen" würde hingegen ALLE Einträge in der LISTBOX de-markieren, so als wären sie mit der Maus wieder de-markiert worden.

Kennt jemand so eine Funktion? In der Doku (z.B. perldoc Tk::Listbox) finde ich so was nicht.

Der aktuelle Code zum Testen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/perl
use strict;
use Tk;
use Tk::LabFrame;
use File::Basename;

# *****************************************************************************
# ** Generiere HAUPTMENÜ ******************************************************
# *****************************************************************************
my $mw = MainWindow->new;
$mw->title("Ein TEST mit LISTBOX");

# *****************************************************************************
# ** Generiere Menü AUSWAHL DES DIRECTORIES ***********************************
# *****************************************************************************
my $laden = $mw->LabFrame(-label=>'[ 1--> Auswahl des Directories ]', -labelside=>'acrosstop')
->pack (-side =>'top', -expand=>1, -fill=>'x');
my $laden_button = $laden->Button(-text=>'Auswählen', -command=> \&Load_Path)
->pack (-side=>'left', -expand=>0, -fill=>'none');
my $laden_entry = $laden->Entry(-width=>100)
->pack (-side=>'left', -expand=>1, -fill=>'x');

# *****************************************************************************
# ** Generiere LISTBOX ********************************************************
# *****************************************************************************
my $listbox_frame = $mw->LabFrame(-label =>'[ 2--> Programme-Auswählen ]',
-labelside =>'acrosstop')
->pack (-side =>'top',


-expand=>'1',


-fill =>'x');

my $Auswahl_Liste = $listbox_frame->Listbox("width" => 70,
"height" => 5,

-selectmode => 'extended')

->pack(-side => 'left');

my $doit_btn = $listbox_frame->Button(-text =>'Ausgewählte Programme ausführen',
-command => \&Run_Perl_Prog)

->pack(-side =>'left',


-expand=>0);

my $Select_All = $listbox_frame->Button(-text =>'Alles auswählen',
-command => \&leeres_info_fenster)

->pack(-side =>'left',


-expand=>0);

my $De_Select_All = $listbox_frame->Button(-text =>'Alles abwählen',
-command => \&leeres_info_fenster)

->pack(-side =>'left',


-expand=>0);

MainLoop();
# *****************************************************************************
# ** Sub LOAD PATH ************************************************************
# *****************************************************************************
sub Load_Path {
my $file_typ = [
['PERL Program', '.pl' ],
['All Files', '*' ],
];
my $dn = $mw->getOpenFile(-filetypes=>$file_typ);
my $file = $dn;
my $dn = dirname($file);

if (defined $dn and $dn ne '') {
$laden_entry->delete(0, 'end');
$laden_entry->insert('end', $dn);

my @files = glob($dn.'/*.pl');
$_ = basename($_) for(@files); # <---Nur FILE NAME übrig lassen.
$Auswahl_Liste->delete(0, 'end')
if(@files);
$Auswahl_Liste->insert('end', @files)
}
}


# *****************************************************************************
# ** Sub Run_Perl_Prog ********************************************************
# *****************************************************************************
sub Run_Perl_Prog {
my $Get_Path = $laden_entry->get();
my $Get_File_Name = $Auswahl_Liste->get($Auswahl_Liste->curselection());
my $slash = "/";
if(!$Get_Path || $Get_Path eq ''){
$mw->messageBox(-message=> " Zuerst ein Programm auswählen.",
-type => "OK"),
return 1;
}
my $tmp_1 = "$Get_Path$slash$Get_File_Name";
my $tmp_2 = qx($^X $tmp_1);
}

# *****************************************************************************
# ** Info-Fenster *************************************************************
# *****************************************************************************
sub leeres_info_fenster {
my $popup = $mw->Dialog(
-popover => $mw,
-title => 'Info Fenster',
-bitmap => 'Tk',
-default_button => 'OK',
-buttons => ['OK'],
-text => "Diese Funktion ist im Moment nicht implementiert. \n".
" \n".

"Bis später. \n".
" \n".
"Danke.",
);
$popup->resizable('no', 'no');
$popup->Show();
}
Dubu
 2004-09-04 19:12
#42662 #42662
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Gerry,04.09.2004, 12:31]Der Button "Alles auswählen" würde also ALLE Einträge in der LISTBOX markieren, so als wären sie mit der Maus markiert worden.
Der Button "Alles abwählen" würde hingegen ALLE Einträge in der LISTBOX de-markieren, so als wären sie mit der Maus wieder de-markiert worden.

Kennt jemand so eine Funktion? In der Doku (z.B. perldoc Tk::Listbox) finde ich so was nicht.[/quote]
[quote= ,perldoc Tk::Listbox]
$listbox->selectionClear(first, ?last?)
       If any of the elements between first and last (inclusive) are selected,
       they are deselected.  The selection state is not changed for
       elements outside this range.
...
$listbox->selectionSet(first, ?last?)
       Selects all of the elements in the range between first and last, inclusive,
       without affecting the selection state of elements outside that range.
[/quote]
first und last sind dabei Indizes. Fuer die gesamte Liste waeren das also "0" bzw. "end".
Strat
 2004-09-05 02:57
#42663 #42663
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
my $Select_All = $listbox_frame->Button(
 -text         =>'Alles auswählen',
 -command      => sub { $Auswahl_Liste->selectionSet(0, 'end');   }
);

Apropos: hast du dir schon mal gedanken ueber die Variablenschreibweise gemacht? z.B. welche Variablen du gross schreibst, welche klein, welche gemischt, ... Ich habe mir z.B. angewoehnt, my-variablen klein zu schreiben, z.B:
Code: (dl )
1
2
3
my $var
my $hauptFenster
my $item

packagevariablen mit grossem ersten buchstaben, z.B.
Code: (dl )
1
2
use vars qw($Var %Config);
our @ListItems

und konstanten komplett gross
Code: (dl )
1
2
3
use constant MAXSIZE => 1024;
# oder
use constant MAX_LENGTH => 1024;

So sehe ich immer auf den ersten Blick, um was fuer eine Art von Variable es sich handelt.\n\n

<!--EDIT|Strat|1094338787-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Gerry
 2004-09-05 12:20
#42664 #42664
User since
2004-08-18
26 Artikel
BenutzerIn
[default_avatar]
Hallo dubu und strat,

danke für die Hinweise .... es funktioniert. Und ich werde mir auch die Variablen-Schreibweise zu Herzen nehmen. Hier kann eine Systematik sicherlich erhebliche Erleichterungen bringen.

Und hier ist der angepasste Code (der Vollständigkeit halber).
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/perl
use strict;
use Tk;
use Tk::LabFrame;
use File::Basename;

# *****************************************************************************
# ** Generiere HAUPTMENÜ ******************************************************
# *****************************************************************************
my $mw = MainWindow->new;
$mw->title("Ein TEST mit LISTBOX");

# *****************************************************************************
# ** Generiere Menü AUSWAHL DES DIRECTORIES ***********************************
# *****************************************************************************
my $laden = $mw->LabFrame(-label=>'[ 1--> Auswahl des Directories ]', -labelside=>'acrosstop')
->pack (-side =>'top', -expand=>1, -fill=>'x');
my $laden_button = $laden->Button(-text=>'Auswählen', -command=> \&Load_Path)
->pack (-side=>'left', -expand=>0, -fill=>'none');
my $laden_entry = $laden->Entry(-width=>100)
->pack (-side=>'left', -expand=>1, -fill=>'x');

# *****************************************************************************
# ** Generiere LISTBOX und BUTTONS ********************************************
# *****************************************************************************
my $listbox_frame = $mw->LabFrame(-label =>'[ 2--> Programme-Auswählen ]',
-labelside =>'acrosstop')
->pack (-side =>'top',


-expand=>'1',


-fill =>'x');

my $Auswahl_Liste = $listbox_frame->Listbox("width" => 70,
"height" => 5,

-selectmode => 'extended')

->pack(-side => 'left');

my $doit_btn = $listbox_frame->Button(-text =>'Ausgewählte Programme ausführen',
-command => \&Run_Perl_Prog)

->pack(-side =>'left', -expand=>0);

my $Select_All = $listbox_frame->Button(-text =>'Alles auswählen',
-command => sub { $Auswahl_Liste->selectionSet(0, 'end');})

->pack(-side =>'left', -expand=>0);

my $De_Select_All = $listbox_frame->Button(-text =>'Alles abwählen',
-command => sub { $Auswahl_Liste->selectionClear(0, 'end');})

->pack(-side =>'left', -expand=>0);


MainLoop();
# *****************************************************************************
# ** Sub LOAD PATH ************************************************************
# *****************************************************************************
sub Load_Path {
my $file_typ = [
['PERL Program', '.pl' ],
['All Files', '*' ],
];
my $dn = $mw->getOpenFile(-filetypes=>$file_typ);
my $file = $dn;
my $dn = dirname($file);

if (defined $dn and $dn ne '') {
$laden_entry->delete(0, 'end');
$laden_entry->insert('end', $dn);

my @files = glob($dn.'/*.pl');
$_ = basename($_) for(@files); # <---Nur FILE NAME übrig lassen.
$Auswahl_Liste->delete(0, 'end')
if(@files);
$Auswahl_Liste->insert('end', @files)
}
}


# *****************************************************************************
# ** Sub Run_Perl_Prog ********************************************************
# *****************************************************************************
sub Run_Perl_Prog {
my $Get_Path = $laden_entry->get();
my $Get_File_Name = $Auswahl_Liste->get($Auswahl_Liste->curselection());
my $slash = "/";
if(!$Get_Path || $Get_Path eq ''){
$mw->messageBox(-message=> " Zuerst ein Programm auswählen.",
-type => "OK"),
return 1;
}
my $tmp_1 = "$Get_Path$slash$Get_File_Name";
my $tmp_2 = qx($^X $tmp_1);
}

# *****************************************************************************
# ** Info-Fenster *************************************************************
# *****************************************************************************
sub leeres_info_fenster {
my $popup = $mw->Dialog(
-popover => $mw,
-title => 'Info Fenster',
-bitmap => 'Tk',
-default_button => 'OK',
-buttons => ['OK'],
-text => "Diese Funktion ist im Moment nicht implementiert. \n".
" \n".

"Bis später. \n".
" \n".
"Danke.",
);
$popup->resizable('no', 'no');
$popup->Show();
}
<< >> 4 Einträge, 1 Seite



View all threads created 2004-09-04 14:31.