Schrift
[thread]4965[/thread]

MainWindow destroy ohne MainLoop zu beenden



<< >> 7 Einträge, 1 Seite
Froschpopo
 2005-04-23 16:40
#43706 #43706
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
kann ich das MainWindow töten ohne dass das Programm abgebrochen wird? Wenn ich nen MainWindow->destroy mache stirbt ja gleichzeitig auch der MainLoop... Gibts da ne Lösung für ?
Ich möchte dass zwar das MainWindow nach einer Zeit zerstört wird, jedoch will ich die Toplevels erhalten und auch die Möglichkeit haben, das MainWindow durch einen Button-Klick im Toplevel wieder zu öffnen.

In der Win32::GUI gibt es sowas ähnliches: Show, Hide, Disable...\n\n

<!--EDIT|Froschpopo|1114262434-->
coax
 2005-04-23 17:56
#43707 #43707
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Mit der withdraw-Methode laesst du es vom Bildschirm verschwinden und mit deiconify und raise machst du's wieder sichtbar.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

 use strict;
 use warnings;

 use Tk;

 my $mw = tkinit();

 my $top = $mw->Toplevel();

 $top->Button(-text => 'MW wiederherstellen',
              -command => sub { $mw->deiconify; $mw->raise; } )->pack();

 $mw->after(5000 => sub { $mw->withdraw } );

 MainLoop;
\n\n

<!--EDIT|coax|1114264670-->
,,Das perlt aber heute wieder...'' -- Dittsche
Froschpopo
 2005-04-23 18:12
#43708 #43708
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
geil ! vielen Dank!
Froschpopo
 2005-04-23 18:35
#43709 #43709
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
hmmm kleines Problem:
nachdem ich das MainWindow weggemacht hab, will ich es nun mit einem Klick auf das systray-icon wiederherrstellen. dazu hab ich folgenden Code gebastelt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
sub systray_RightClick {
    my $systray_menu = new Win32::GUI::Menu(
        "SystrayMenu Functions" =>"SystrayMenu",
        "> Öffnen"       => "open_main",
    );
    my($x, $y) = Win32::GUI::GetCursorPos();
    $config{Win32Window}->TrackPopupMenu($systray_menu->{SystrayMenu}, $x, $y-50);
}

sub open_main {
    $config{MainWindow}->deiconify;
    $config{MainWindow}->raise;
};

Das systray-Menü funktioniert soweit einwandfrei, jedoch öffnet sich das MainWindow nichtmehr. Fehlermeldung gibt es auch keine\n\n

<!--EDIT|Froschpopo|1114266953-->
Dubu
 2005-04-24 16:13
#43710 #43710
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Hilft ein zusaetzliches $config{MainWindow}->MapWindow? Kommst du anschliessend auch wieder in die MainLoop()?
Froschpopo
 2005-04-24 16:31
#43711 #43711
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich hab herausgefunden, dass es nicht an Tk liegt sondern an dem Win32::GUI::Menu im Systray !
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
#!/usr/bin/perl 

use Tk;
use Win32::GUI;

our %config = ();

my $main = MainWindow->new(
   -height => 30,
   -width => 50
);

$win32 = Win32::GUI::Window->new(
   -name => 'Main',
   -text => 'Perl TrayIcon',
   -width => 0,
   -height => 0,
   -visible => 0
);

my $icon = new Win32::GUI::Icon('19.ico');


my $ni = $win32->AddNotifyIcon(
   -name => "systray",
   -id => 1,
   -icon => $icon,
   -tip => "Icon in der Systray"
);

sub systray_RightClick {
   my $systray_menu = new Win32::GUI::Menu(
       "SystrayMenu Functions" =>"SystrayMenu",
       "> hier klicken" => 'test'
   );
   my($x, $y) = Win32::GUI::GetCursorPos();
   $win32->TrackPopupMenu($systray_menu->{SystrayMenu},   $x, $y-50);
}

sub test {
   print "hallo\n";
}

MainLoop;

An dem Code wird einfach nicht die test() gestartet. Er gibt aber auch keine Fehlermeldung aus. Ich steig einfach nicht dahinter was daran falsch ist. hab das Problem jetzt schon 3 Tage ohne auch nur einen Schritt weiterzukommen\n\n

<!--EDIT|Froschpopo|1114390461-->
Froschpopo
 2005-04-25 04:54
#43712 #43712
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ahh hat sich erledigt... da muss man erstmal drauf kommen dass es AUCH test_Click() heißen muss.... au man
<< >> 7 Einträge, 1 Seite



View all threads created 2005-04-23 16:40.