Schrift
[thread]4673[/thread]

Scrollbars

Leser: 2


<< >> 6 Einträge, 1 Seite
Gast Gast
 2003-11-19 16:08
#45266 #45266
Guten Tag!
Ich habe folgendes Problem:
Ich möchte mir eine Liste von Entries in einem Fenster
anzeigen lassen. Das funktioniert auch ganz gut (die Daten beziehe ich aus einer Datenbank, die Entries sind jeweils mit einem bind versehen, um Änderungen aktualisieren zu können.)
Nun möchte ich allerdings eine simple Scroll-Leiste hinzufügen,
da das Fenster sonst zu groß wird(Dies Entries sind untereinander angeordnet).
Meine Frage:
Kann ich Scroll-Leisten nur für Canvas- oder Listbox-Widges verwenden (das wäre allerdings enttäuschend)?
Ishka
 2003-11-19 16:13
#45267 #45267
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ich glaube es gibt die Möglichkeit beliebige Subroutinen für 'nach oben scrollen' und 'nach unten scrollen' anzugeben - oder zumindestens sowas in der Art. Ich schau mal, ob ich das noch finde.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
Ishka
 2003-11-19 16:37
#45268 #45268
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
ReadTheFriendlyManual ;)

ELEMENTS
A scrollbar displays five elements, which are referred to in the methods for the scrollbar:

arrow1
The top or left arrow in the scrollbar.

trough1
The region between the slider and arrow1.

slider
The rectangle that indicates what is visible in the associated widget.

trough2
The region between the slider and arrow2.

arrow2
The bottom or right arrow in the scrollbar.

dh. wenn du die bindings für Mausklicks auf die beiden Pfeile und was du sonst noch brauchst änderst, sollte es gehen.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
coax
 2003-11-19 17:54
#45269 #45269
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
use Tk::Pane; ;-)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl
use Tk;
use Tk::Pane;

my $mw = new MainWindow;

my $p = $mw->Scrolled('Pane', -scrollbars => 'osoe')->pack();

$p->Entry()->pack() for 1..10;

MainLoop();
,,Das perlt aber heute wieder...'' -- Dittsche
Crian
 2003-11-19 19:05
#45270 #45270
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Neben der Verwendung von "Scrolled" kannst Du auch einzelne Scrollbars anlegen und mit einem (oder mehreren) Widgets verbinden...

ich such mal, ob ich ein passendes Beispiel finde...
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-11-19 19:09
#45271 #45271
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Zum Beispiel dieses (auch auf meiner Homepage zu finden):

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
#!/usr/bin/perl
use diagnostics;
use strict;
use warnings;
use Tk;

my $mw = MainWindow->new();

my $fr = $mw->Frame();

my $scrollx = $fr->Scrollbar(-orient => 'horizontal');
my $scrolly = $fr->Scrollbar();

my $ltext = $fr->Text(-width          =>  5,
                     -height         => 30,
                     -wrap           => 'none',
                     -background     => 'black',
                     -foreground     => 'green',
                     -borderwidth    => 0,
                     -selectbackground     => 'white',
                     -selectforeground     => 'blue',
                     -insertbackground => 'red',
                    );

my $rtext = $fr->Text(-width          => 80,
                     -height         => 30,
                     -wrap           => 'none',
                     -xscrollcommand => ['set' => $scrollx],
                     -yscrollcommand => ['set' => $scrolly],
                     -background     => 'lightgreen',
                     -foreground     => 'black',
                     -selectbackground     => 'black',
                     -selectforeground     => 'orange',
                     -borderwidth    => 0,
                    );

$scrollx->configure(-command => ['xview' => $rtext]);


# Den Scrollbalken so konfigurieren, dass er alle Listboxen scrollt:
$scrolly->configure(-command => sub {$ltext->yview(@_);
                                    $rtext->yview(@_);
                                   }
                  );

# Diese Methode wird aufgerufen, wenn eine der Textboxen mit der Tastatur
# gescrollt wird. Sie sorgt dafür, dass der Scrollbalken die Veränderung
# wiedergibt und die andere Textbox mitgescrollt werden.
sub scroll_textboxen {
   my ($text, $textboxes, @args) = @_;
   $scrolly->set(@args);                  # Dem Scrollbalken mitteilen,
                                          # was angezeigt wird
   my ($top, $bottom) = $text->yview();   # Ausschnitt des gescrollten
                                          # Textfeldes auslesen
   for my $t (@$textboxes) {              # Alle Textboxen auf diesen Aus-
       $t->yviewMoveto($top);             # schnitt setzen.
   }
} # sub scroll_listboxes

$ltext->configure(-yscrollcommand => [ \&scroll_textboxen,
                                      $ltext,
                                      [$ltext, $rtext],
                                    ]
                );
$rtext->configure(-yscrollcommand => [ \&scroll_textboxen,
                                      $rtext,
                                      [$ltext, $rtext],
                                    ]
                );

$scrollx->pack(-side => 'bottom',
              -fill => 'x',
             );
$scrolly->pack(-side => 'right',
              -fill => 'y',
             );
$ltext->pack(-side => 'left',
            -fill => 'y',
           );
$rtext->pack(-side   => 'left',
            -fill   => 'both',
            -expand => 1,
           );


$fr->pack(-side   => 'left',
         -fill   => 'both',
         -expand => 1,
        );

for (1..200) {
   $_ = ' ' x (5-length($_)) . $_;
   $ltext->insert('end', "$_\n");
   $rtext->insert('end', $_ x 50 . "\n");
}
$ltext->insert('end', "  201");
$rtext->insert('end', "  201" x 50);

$ltext->focus();

MainLoop();


Mit diesem Ergebnis:

http://www.duehl.de/christian/snippets/tk_zweitext...
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
<< >> 6 Einträge, 1 Seite



View all threads created 2003-11-19 16:08.