Thread Perl/Tk: Photo auf einem Canvas austauschen (1 answers)
Opened by Gast at 2008-09-16 14:05

Gast Gast
 2008-09-16 16:43
#114710 #114710
Ich habe das jetzt mal mit globalen Variablen gelöst, obwohl ich das nicht sehr schön finde:
Code (perl): (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
use Tk;
use Tk::PNG;
use strict;
use warnings;
use FindBin;

my $main = new MainWindow;

our $DiagramWin;
our $DiagramWin_open = 0;
our $canv; # Canvas auf Unterfenster

our $diagram = $main -> Photo(); # leeres Bildobjekt erstellen
                
my $butShow1 = $main -> Button(-text=>" Show 1 ", -command =>\&butShow1_clicked) ->pack(-side => 'top');
my $butShow2 = $main -> Button(-text=>" Show 2 ", -command =>\&butShow2_clicked) ->pack(-side => 'top');
my $butQuit  = $main -> Button(-text=>" Close  ", -command =>\&DiagramWin_close) ->pack(-side => 'top');

MainLoop;

sub butShow1_clicked { &DiagramWin_show("wetterdiagramm1.png") };
sub butShow2_clicked { &DiagramWin_show("wetterdiagramm2.png") };

sub DiagramWin_show 
{
        my $png_filename = shift;       
        if ($DiagramWin_open eq 0) # nur aufrufen wenn Fenster noch nicht existiert
        {
                $DiagramWin = $main -> Toplevel (-title=> "Unterfenster", -width=>1024, -height=>768);
                $DiagramWin -> OnDestroy(\&DiagramWin_destroyed);       
                $canv = $DiagramWin -> Canvas(-width => 1024, -height => 768, -background => 'dark slate gray')->pack;
                $canv -> create ('image', 0, 0, -image => $diagram, -anchor => 'nw');
        }               
        $diagram -> configure (-file => $FindBin::Bin . "/" . $png_filename);   
        $DiagramWin -> update(); # Fenster aktualisieren        
        $DiagramWin_open = 1;
} 

sub DiagramWin_close
{
        if ($DiagramWin_open) { $DiagramWin -> destroy(); }
}

sub DiagramWin_destroyed
{
        $DiagramWin_open = 0;
}

View full thread Perl/Tk: Photo auf einem Canvas austauschen