Schrift
[thread]5326[/thread]

Tk Canvas (Image Area oder Mouse Coordinates)

Leser: 3


<< >> 5 Einträge, 1 Seite
StrongSteve
 2007-06-05 21:43
#46415 #46415
User since
2007-06-05
2 Artikel
BenutzerIn
[default_avatar]
Hi Leute!

Ich möchte gerne in Perl mittels TK ein Bild (gif) einbinden und dann bestimmte Areas definieren, denen ich für ein Click-Event unterschiedliche Funktionen zuweisen kann. Evt. auch einen Mouseover-Text.

Im Prinzip genau dasselbe wie in HTML mittels Image Maps möglich ist. Image Maps

Da ich keine Möglichkeit gefunden habe Areas zu definieren ist mein Plan zur Zeit der Folgende:

- Bild in einem Canvas anzeigen
- Bei einem Klick auf das Bild eine Funktion aufrufen, dort die Mauskoordinaten auslesen und ja nach Mauskoordinaten eine bestimmte Funktion aufrufen (if-else Kaskade)

Teil 1 habe ich schon. In etwa so:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    #!/usr/bin/perl -w
use strict;
use Tk;
my $main = new MainWindow;
my $canvar = $main ->Canvas;
$canvar->pack;
my $file = 'image.gif';
my $img =
$canvar->Photo( 'imggif',
-file => $file );

$canvar->create( 'image',0,0,
'-anchor' => 'nw',
'-image' => $img,
);

MainLoop;


Kann mir wer mit dem Auslesen der Mauskoordinaten helfen? Oder gibt es noch eine bessere Möglichkeit?

Danke im Voraus!

mfg
Stefan
Sucher
 2007-06-06 01:44
#46416 #46416
User since
2007-03-26
47 Artikel
BenutzerIn
[default_avatar]
Hallo,

du könntest einfach polygone darüber legen. -stipple muß 'transparent' sein, dann funktionieren auch die bindings.

Grüße,
StrongSteve
 2007-06-06 10:37
#46417 #46417
User since
2007-06-05
2 Artikel
BenutzerIn
[default_avatar]
Also in etwa so...

Code: (dl )
1
2
$canvas -> create('polygon',5,100,50,5,150,5,200,100,5,100,
-stipple='transparent');


Kann ich da dann einfach sagen:

Code: (dl )
-command => \&show_popup
Sucher
 2007-06-06 10:47
#46418 #46418
User since
2007-03-26
47 Artikel
BenutzerIn
[default_avatar]
Hallo,

nicht ganz:
Code: (dl )
1
2
3
4
my $item = $canvas ->create('polygon',5,100,50,5,
150,5,200,100,5,100,
-stipple='transparent');
$canvas->bind($item,'<Event>',Callback);


Oder schau dir mal Tk::Balloon an.

Grüße,
Sucher
 2007-06-07 00:50
#46419 #46419
User since
2007-03-26
47 Artikel
BenutzerIn
[default_avatar]
Hallo,

jetzt hatte ich Zeit für ein kleines Beispiel, ich hoffe, es hilft dir weiter:
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
use warnings;
use strict;
use Tk;
use Tk::Balloon;

my $mw = tkinit;
my $can = $mw->Canvas->pack;
$can->createRectangle(10,10,100,100,-fill=>'red');
my $left = $can->createRectangle(10,10,50,100,
-stipple => 'transparent',
-fill => 'black',
-outline => '',
-tags => ['left'],
);
$can->bind($left,'<1>',sub{
$mw->messageBox(-message => 'you clicked the left side!');
});
my $b = $mw->Balloon();

$b->attach($can,
-balloonposition => 'mouse',
-msg => {'left' => 'click here for a message',
},
);
MainLoop;


Grüße,
<< >> 5 Einträge, 1 Seite



View all threads created 2007-06-05 21:43.