Schrift
[thread]4629[/thread]

Elemente gruppieren / ein- und ausblenden



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Robby
 2003-08-21 13:34
#41706 #41706
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich hab die Frage teilweise schon im anderen Thread gestellt. Aber ich mach mal dafür einen neuen Thread auf, nicht böse sein :)

Meine Frage wäre:
Eigentlich möchte ich so etwas haben wie Tk:Notebook oder HList (wurde mir vorgeschlagen)

Hier mal für alle die es nicht kennen der Code
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
use Tk;
$mw = MainWindow->new( );
# Create the notebook and fill the whole window
$nb = $mw->NoteBook( )->pack(-expand => 1, -fill => 'both');
# Page 1 on the notebook, with button on that page
$p1 = $nb->add('page1', -label => 'Page 1');
$p1->Label(-text => 'Seite 1!')->pack( );
# Empty page 2
$p2 = $nb->add('page2', -label => 'Page 2');
$p2->Button(-text => 'Seite 1!')->pack( );
MainLoop;


So soll mein Programm mal aussehen:

- Wetter Daten
Wetter: sonnig
Temperatur 28 Grad
+ Temperatur im Büro
- Google Suche
< EingabeFeld>
+ Projekt-Tools
+ Speiseplan


Wenn ich nun auf Wetter drücke schliesst sich der
Frame und ein + erscheint vor Wetter.
Wenn ich auf "Temperatur im Büro" klicke soll
sich ein neuer Frame öffnen in dem die Wetterdaten
fürs Büro stehen....(analog zum Explorer mit den Ordner in Windows)

Ich hoffe irgendeiner versteht was ich meine *heul* :D
Kaum macht man es richtig - schon funktioniert es!
Crian
 2003-08-21 14:41
#41707 #41707
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ich würde auch die HList empfehlen. Zwei kleine Beispiele findest Du auf meiner Perlseite, ansonsten hab ich auch gerade etwas mit der HList gemacht, allerdings nicht mit Ein/Ausklappbaren Elementen.

Warte mal, ich glaub ich hab mal für irgendwen aus dem alten Forum ein ein-/ausklappbares Verzeichnisfenster gebastelt. Ich such mal danach, wenn ich es finde, poste ich den Code hier gleich noch rein.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Crian
 2003-08-21 14:55
#41708 #41708
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
So, habs gefunden, das war mit von für Math55, sieht noch nicht schön aus, tut aber im Prinzip das was Du auch brauchst und kann Dir also als Anschauung dienen...

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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

use Tk;
require Tk::HList;

my $top = MainWindow->new(-title=>"FileSelector");

my $h = $top->Scrolled('HList',
                       -drawbranch => 1,
                       -separator  => '/',
                       -indent     => 15,
                       -command    => \&show_or_hide_dir,
                      )
                ->pack(-fill       => 'both',
                       -expand     => 'y',
                      );

my $xpm = <<'END';
/* XPM */
static char *test[]={
"32 32 11 1",
". c None",
"# c #000000",
"h c #004000",
"g c #004040",
"f c #404000",
"e c #808080",
"i c #a0a0a4",
"c c #c0c000",
"d c #ffff00",
"b c #ffffc0",
"a c #ffffff",
"................................",
"................................",
"................................",
"................................",
".............#....###...........",
"............#a##.#aba##.........",
"...........#aaaa#aaaaaa##.......",
"..........#aaaa#aaaaaaaba##.....",
".........#aaaa#aaaaaaaaaaab##...",
"........#aaba#aaaaaaabaabaaaa##.",
".......#aaba#baaaaa#baaaaaabaaa#",
"......#aaaa#aaaaab#a##baaaaaaa#.",
".....#aaba#aacbba#aaaa##baaab#..",
"....#bbaa#abaacc#aaaaaaa##aa#...",
"...#bbbb#aaabaa#aaabaaaaaa##....",
"..#bbbb#bacaaa#aaaaaaaabaaaa##..",
".#bbbb#bbaacc#aacaaaaaaaaaaaba#.",
"#ddbb#bbbbba#aaaaccaaaaaaaaaaaa#",
"#edddfgcbbbfaacaaaaccaaaaaaaaa#e",
".#hedddfhcfabaaccaaabccaaaaaa#e.",
"...##edddhaacbbaaccbaaaccaab#i..",
".....##e#baaaccabaaccbaabaa#i...",
"......##bacbaabccbaaaccabb#e....",
"......#bbbbccaabbccaaaaab#i.....",
".....#bbbbbbbccabbaccaab#i......",
".....#ebbbbbbbbccbaabba#i.......",
"......##ebbbbbbbbccaabhe........",
"........##ebbbbbbbbbb#e.........",
"..........##ibbbbbbbhe..........",
"............##ebbbb#e...........",
"..............#hee#i............",
"................##i............."};
END

my %icons;
#$icons{"open"}   = $top->Bitmap(-file => './open_folder.xbm');
#$icons{"closed"} = $top->Bitmap(-file => './folder.xbm');
$icons{"open"}   = $top->Pixmap(-data => $xpm);
$icons{"closed"} = $top->Pixmap(-data => $xpm);

#show_or_hide_dir("c:\\programme");
show_or_hide_dir(@ARGV);
#show_or_hide_dir("p:");

#show_or_hide_dir("/temp");

MainLoop();

#-----------------------------------------------------------------------
sub show_or_hide_dir {
    my $path = $_[0];
    print "PATH:".$path;
    return if (! -d $path);
    if ($h->info('exists', $path)) {
        my $next_entry = $h->info('next', $path);
        if (!$next_entry || (index ($next_entry, "$path/") == -1)) {
            $h->entryconfigure($path, '-image' => $icons{"open"});
            add_dir_contents($path);
            my $path1 = $path;
            my $path2 = $path;
            my @du = ("du", "-b", "-h", $path1, $path2);
            my $dirSize = system(@du) == 0 or die "system @du failed: $?";
        }
        else {
            $h->entryconfigure($path, '-image' => $icons{"closed"});
            $h->delete('offsprings', $path);
        }
    }
    else {
        die "'$path' is not a directory\n" if (! -d $path);
        $h->add($path,
                -itemtype => 'imagetext',
                -image    => $icons{"open"},
                -text     => $path,
               );
        add_dir_contents($path);
    }
}

sub add_dir_contents {
    my $path = $_[0];
    my $oldcursor = $top->cget('-cursor');

    $top->configure(-cursor => 'watch');
    $top->update();

    my @files = <$path/*>;
    foreach my $file (@files) {
        $file =~ s|//|/|g;
        #$file =~ /^\s*$/;

        print "FILE:".$file."\n\n";
        (my $text = $file) =~ s|^.*/||g;
        if (-d $file) {
            $h->add($file,
                    -itemtype => 'imagetext',
                    -image    => $icons{"closed"},
                    -text      => $text,
                   );
        }
        else {
            $h->add($file,
                    -itemtype => 'text',
                    -text     => $text,
                   );
        }
    }
    $top->configure(-cursor => $oldcursor);
} # sub add_dir_contents



Anmerkung: Ich habe hier [ code ] und nicht [ perl ] genommen, weil letzteres buggy ist. Dort wird u.a. falsch eingerückt...
Außerdem sind die Farben so verstörend, dass ich den Code lieber s/w sehe...
Edit: Auch bei Code wird immer noch das erste Leerzeichen entfernt :(
Edit2: fehlende Leerzeichen von Hand ergänzt :-/\n\n

<!--EDIT|Crian|1061463653-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Robby
 2003-08-21 15:16
#41709 #41709
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,21.08.2003, 12:55]Edit: Auch bei Code wird immer noch das erste Leerzeichen entfernt :(
Edit2: fehlende Leerzeichen von Hand ergänzt :-/[/quote]
so viel Mühe nur für mich...danke! *lach*

zum Code....jein, ist nicht ganz das was ich haben wollte....aber mal sehn ob ich was draus basteln kann....mmmmh
Kaum macht man es richtig - schon funktioniert es!
Crian
 2003-08-21 15:51
#41710 #41710
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ja, für Dich (und alle anderen die ev. mal über dieses Beispiel stolpern :-) )

Naja, Du kannst doch die Verzeichnisse an dem Icon auf- und zuklappen. Wenn Du statt dem einen jetzt zwei kleine bastelst mit einem Plus und einem Minus, kommt das doch fast hin...

Oder was soll anders sein?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Robby
 2003-08-21 15:57
#41711 #41711
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
ähm...ja Verzeichnisse kann ich auf und zu klappen.
Ich müsste aber Frames auf und zuklappen. Die Frames enthalten dann entrys, Labels usw. ... so wie Tk:Notebook halt, nur das ich mehrere Seiten gleichzeitig aufhaben kann :(

Ich glaub ich hab das ein wenig schlecht erklärt :)
Und so wie ich das sehe wird das mal wieder eine Eigenentwicklung *heul*
Kaum macht man es richtig - schon funktioniert es!
Strat
 2003-08-21 16:14
#41712 #41712
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
hilft dir vielleicht pack und packForget? damit kannst du die Anzeige steuern, und musst nicht jedesmal den kompletten Frame killen und wieder neu erzeugen...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2003-08-21 16:14
#41713 #41713
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Mist, dabei hatte ich gerade noch eine Version mit plus und minus für Dich gebastelt, hier:

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
129
130
131
132
133
134
135
136
137
138
139
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

use Tk;
require Tk::HList;

my $top = MainWindow->new(-title=>"FileSelector");
$top->geometry("300x500");

my $h = $top->Scrolled('HList',
-drawbranch => 1,
-separator => '/',
-indent => 15,
-command => \&show_or_hide_dir,
-scrollbars => 'osoe',
)
->pack(-fill => 'both',
-expand => 'y',
);

my $xpm_p = <<'ENDE';
/* XPM */
static char *test[]={
"12 12 2 1",
". c None",
"# c #000000",
".....##.....",
".....##.....",
".....##.....",
".....##.....",
".....##.....",
"############",
"############",
".....##.....",
".....##.....",
".....##.....",
".....##.....",
".....##....."};
ENDE

my $xpm_m = <<'ENDE';
/* XPM */
static char *test[]={
"12 12 2 1",
". c None",
"# c #000000",
"............",
"............",
"............",
"............",
"............",
"############",
"############",
"............",
"............",
"............",
"............",
"............"};
ENDE

my %icons;
#$icons{"open"} = $top->Bitmap(-file => './open_folder.xbm');
#$icons{"closed"} = $top->Bitmap(-file => './folder.xbm');
#$icons{"open"} = $top->Pixmap(-data => $xpm);
#$icons{"closed"} = $top->Pixmap(-data => $xpm);
$icons{"open"} = $top->Pixmap(-data => $xpm_m);
$icons{"closed"} = $top->Pixmap(-data => $xpm_p);

#show_or_hide_dir("c:\\programme");
show_or_hide_dir(@ARGV);
#show_or_hide_dir("p:");

#show_or_hide_dir("/temp");

MainLoop();

#-----------------------------------------------------------------------
sub show_or_hide_dir {
my $path = $_[0];
print "PATH:".$path;
return if (! -d $path);
if ($h->info('exists', $path)) {
my $next_entry = $h->info('next', $path);
if (!$next_entry || (index ($next_entry, "$path/") == -1)) {
$h->entryconfigure($path, '-image' => $icons{"open"});
add_dir_contents($path);
my $path1 = $path;
my $path2 = $path;
my @du = ("du", "-b", "-h", $path1, $path2);
my $dirSize = system(@du) == 0 or die "system @du failed: $?";
}
else {
$h->entryconfigure($path, '-image' => $icons{"closed"});
$h->delete('offsprings', $path);
}
}
else {
die "'$path' is not a directory\n" if (! -d $path);
$h->add($path,
-itemtype => 'imagetext',
-image => $icons{"open"},
-text => $path,
);
add_dir_contents($path);
}
}

sub add_dir_contents {
my $path = $_[0];
my $oldcursor = $top->cget('-cursor');

$top->configure(-cursor => 'watch');
$top->update();

my @files = <$path/*>;
foreach my $file (@files) {
$file =~ s|//|/|g;
#$file =~ /^\s*$/;

print "FILE:".$file."\n\n";
(my $text = $file) =~ s|^.*/||g;
if (-d $file) {
$h->add($file,
-itemtype => 'imagetext',
-image => $icons{"closed"},
-text => $text,
);
}
else {
$h->add($file,
-itemtype => 'text',
-text => $text,
);
}
}
$top->configure(-cursor => $oldcursor);
} # sub add_dir_contents


:)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Robby
 2003-08-21 16:48
#41714 #41714
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
[quote=Strat,21.08.2003, 14:14]hilft dir vielleicht pack und packForget? damit kannst du die Anzeige steuern, und musst nicht jedesmal den kompletten Frame killen und wieder neu erzeugen...[/quote]
nicht ganz, packForget und danach pack patscht mir den Frame wieder unten dran, ich will ihn aber an die Stelle zurück haben wo er davor war.....ich werde einfach mal versuchen die größe auf 1 Pixel zu setzen, dann isses auch weg :)

Andere Ideen sind sehr willkommen!
Kaum macht man es richtig - schon funktioniert es!
Robby
 2003-08-21 16:48
#41715 #41715
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,21.08.2003, 14:14]Mist, dabei hatte ich gerade noch eine Version mit plus und minus für Dich gebastelt, hier:[/quote]
*schick* aber leider brauch ich eine andere Lösung...wobei....ich sicher es mir mal weg...in 1-2 Monaten brauch ich so was wieder ;)
Kaum macht man es richtig - schon funktioniert es!
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2003-08-21 13:34.