Thread Tk - wie mit Mousewheel Elemente scrollen (7 answers)
Opened by james.coder at 2011-10-17 01:15

james.coder
 2011-10-17 01:15
#153251 #153251
User since
2011-10-17
2 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,

Ich suche die Möglichkeit, innerhalb eines Canvas-Elementes "normale" (nicht mittels z.B.
Code: (dl )
::canvas->createText(...)
)
-->>Label usw erzeugte Elemente mittels Mousewheel zu scrollen.

Das Canvas-Element wird hier "etwas" mißbraucht, da "Pane" nicht meine Erwartungen erfüllt.

Habe dieses Board natürlich bereits durchsucht, und es existiert zusätzlich eine Lösung:

* Tk::DynaMouseWheelBind

welche fast jeglichen Wunsch abbildet.

Allerdings eben nur die mittels [...-->>create] erzeugten Elemente.

Den Lösungsweg innerhalb -->>DynaMouseWheelBind kann ich nur grob nachvollziehen, kann also daraus keine eigenständige Lösung ableiten.

Deshalb hier in diesem Forum:
zum Code:
Der Code enthält einen Block->A, in welchem "klassische" Elemente erzeugt werden.

Der Block->B (noch auskommentiert) erzeugt "echte" Canvas-Elemente, scrollbar.
Der Block->A muß vorher natürlich auskommentiert werden.

Hat jemand eine Idee ? Oder ist dieser Weg mittels dem Canvas prinzipiell nicht möglich ??

STATUS::
Das Mousewheel "funktioniert", allerdings werden eben nicht die Labelframes aktualisiert/ mitgezogen ;-). Mit dem Code in [Block->B] funktioniert alles wunderbar.

Hier der Code:
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
use strict;
use warnings;

use Tk;

#use Tk::DynaMouseWheelBind;




# --START--#
my $top = new MainWindow;

$top->geometry("700x800");

#-- START Scrolled Canvas----#

my $zcanvas = $top->Scrolled(
qw/Canvas -relief sunken -width 400 -height 400
-bg white -borderwidth 1 -scrollbars se
-scrollregion / => [qw/0 0 1000 1000/]
)

->pack( -expand => 1, -fill => "both" );

my $ic = $zcanvas->Subwidget('Scrolled');

#--ENDE Scrolled Canvas----#



#---<<<<<<<< A) START Labelframe >>>>>>>>--#

my $ZLFRAME = $zcanvas->Labelframe(-relief=> "groove", -text =>"...", -bg => "#FFFFFF")
->pack( -expand => 1,
-fill => "both" ,
-padx => 10,
-pady => 10,
-ipadx => 10,
-ipady => 5);

for ( 1 .. 22 ) {
my $zlabel .= $_;

$zlabel = $ZLFRAME->Labelframe( -text => "[$_]", -bg => "#FFFFEE" )
->pack( -expand => 1,
-fill => "both" ,
-padx => 10,
-pady => 10,
-ipadx => 10,
-ipady => 5);

my $zlabelfr = $zlabel->Label( -text => "Umlauf[$_]" )->pack;

}
#---<<<<<<<< A) ENDE Labelframe >>>>>>>>--#

#---<<<<<<<< B) START CreateText >>>>>>>>--#
# my $y = 10;
#
# $zcanvas->createText (250,0,-anchor=>'n',-justify=>"center",
# -width=>500,-text=>"\n",-fill=>"yellow");
#
# for ($i = 0 ; $i < 100 ; $i++)
# {
# $zcanvas->createText(150,$y,-anchor=>"nw",-fill=>"black",-text=>$i);
# $y += 25;
# }

#---<<<<<<<< B) ENDE CreateText >>>>>>>>--#


#---MOUSEWHEEL BINDINGS
$top->bind(
$top,
'<MouseWheel>',
[
sub {
my $unit = $_[1] > 0 ? -1 : 1;
$zcanvas->yviewScroll( $unit => 'units' );
},
Ev('D')
]
);


MainLoop;


SOFTWARE-(Versionen)
---------------------------------------------------------------------------------------
OS:: Win7, prof, 64bit,
Perl/strawberry::perl 5, version 12, subversion 3 (v5.12.3) MSWin32-x86-multi-thread
Tcl::8.5.10.1
TK:: Tk-804.029

modedit Editiert von GwenDragon: Titel verständlich gemacht
Last edited: 2011-10-17 10:29:32 +0200 (CEST)

View full thread Tk - wie mit Mousewheel Elemente scrollen