Keine Frage zu SuSE, aber dafür zu Perl. Ich habe eine Anwendung in Perl geschrieben und nun ein kleines (hoffentlich) Problem: Wenn ich auf den Button klicke wird die sub ausgeführt. Soweit so gut. Die sub soll nun aber auch angesprochen werden, wenn der Nutzer auf das kleine Kreuz (Fenster schließen) des KDE-Fensters klickt. #!/usr/bin/perl use Tk; $top=MainWindow->new(); $top->Button(-text => 'Fertich!', -command => \&programm_ende)->pack; MainLoop; -1; sub programm_ende() { print("Programm-Ende\n"); } Kann evtl. einer helfen? "Mastering Perl/Tk" habe ich schon durchgeblättert und gegoogelt. Das ich nichts gefunden habe mag aber auch an meinen etwas kärglichen Englischkenntnissen liegen. Mit freundlichem Gruß Karl Brandt -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Tuesday 16 January 2007 17:26, Karl Brandt wrote:
Ich habe eine Anwendung in Perl geschrieben und nun ein kleines (hoffentlich) Problem:
Wenn ich auf den Button klicke wird die sub ausgeführt. Soweit so gut.
Die sub soll nun aber auch angesprochen werden, wenn der Nutzer auf das kleine Kreuz (Fenster schließen) des KDE-Fensters klickt.
#!/usr/bin/perl use Tk;
$top=MainWindow->new(); $top->Button(-text => 'Fertich!', -command => \&programm_ende)->pack;
MainLoop; -1;
sub programm_ende() { print("Programm-Ende\n"); }
Kann evtl. einer helfen? "Mastering Perl/Tk" habe ich schon durchgeblättert
Seite 243: Window Properties Du suchst nach $top->protocol(WM_DELETE_WINDOW, sub {programm_ende; $top->destroy;}) oder so ähnlich Torsten
Hallo, Am Die, 16 Jan 2007, Torsten Foertsch schrieb:
On Tuesday 16 January 2007 17:26, Karl Brandt wrote:
Die sub soll nun aber auch angesprochen werden, wenn der Nutzer auf das kleine Kreuz (Fenster schließen) des KDE-Fensters klickt.
Das hat aber nur bedingt mit KDE zu tun. Unter anderen WMs läuft Tk ja auch. Ich hätte jetzt mit Perl/Qt gerechnet...
#!/usr/bin/perl use Tk;
... aber doch Tk.
$top=MainWindow->new(); $top->Button(-text => 'Fertich!', -command => \&programm_ende)->pack;
MainLoop; -1;
Wieso -1?
sub programm_ende() { print("Programm-Ende\n"); }
Kann evtl. einer helfen? "Mastering Perl/Tk" habe ich schon durchgeblättert
Seite 243: Window Properties
Du suchst nach $top->protocol(WM_DELETE_WINDOW, sub {programm_ende; $top->destroy;})
Das $top->destroy ist normalerweise überflüssig, das wird vom (auf _TK_EXIT_) umgebogenen 'exit' von Tk mit erledigt ;) Ich habe das hier IIRC mal auch über Signal-Handler oder so gemacht, das könnte man noch zusätzlich einbauen ;) $ perl -we ' use Tk; local $SIG{"TERM"} = \&ende; local $SIG{"INT"} = \&ende; $mw = new MainWindow; $mw->Button( -text => "Ferdsch", -command => \&ende )->pack; $mw->protocol("WM_DELETE_WINDOW", \&ende); MainLoop; 1; sub ende { print "Ende\n"; exit(0); } ' -dnh -- 181: Internet Das Internet ist durch die preußische Landordnung vorhergesagt worden. (BMJ-Mitarbeiter Dr. Matthias Korte interpretiert Bundesverwaltungsrichter Prof. Dr. Dr. Jörg Berkemann) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
David Haller wrote:
Hallo,
Am Die, 16 Jan 2007, Torsten Foertsch schrieb:
On Tuesday 16 January 2007 17:26, Karl Brandt wrote:
Die sub soll nun aber auch angesprochen werden, wenn der Nutzer auf das kleine Kreuz (Fenster schließen) des KDE-Fensters klickt.
Danke an David Haller und Torsten Foertsch. Mit so viel Hilfe körperlichen Einsatz hatte ich nicht gerechnet. Freue mich über die Lösung. Morgen habe ich wieder Zeit für das Projekt und dann wird es umgesetzt.
Das hat aber nur bedingt mit KDE zu tun. Unter anderen WMs läuft Tk ja auch. Ich hätte jetzt mit Perl/Qt gerechnet... Nö, hatte es auch nicht. Da ich mir aber nicht so ganz sicher war, habe ich es vorsorglich mal erwähnt. Ich programmiere eigentlich nur sehr gelegentlich, was zur Folge hat, dass ich jedes mal wieder von vorne anfange. Also nicht wundern, wenn ich zwei Jahren die gleich Frage noch einmal stelle ;-)
Perl/Qt ist das schöner, schneller, ....?
#!/usr/bin/perl use Tk;
... aber doch Tk.
$top=MainWindow->new(); $top->Button(-text => 'Fertich!', -command => \&programm_ende)->pack;
MainLoop; -1;
Wieso -1?
Hatte ich irgendwo gelesen, dass -1 am Ende verhindert das ein Perlscript mal Amok läuft. Diese -1 sagt also dem Interpreter, dass wenn er bis hierher kommt, dass Script definitiv am Ende ist. Oder gilt das nur für Module? Eigentlich aber egal, oder? Hatte noch nie merklichen Nutzen davon, aber auch noch nie Ärger.
sub programm_ende() { print("Programm-Ende\n"); }
Kann evtl. einer helfen? "Mastering Perl/Tk" habe ich schon durchgeblättert Seite 243: Window Properties
Du suchst nach $top->protocol(WM_DELETE_WINDOW, sub {programm_ende; $top->destroy;})
Das $top->destroy ist normalerweise überflüssig, das wird vom (auf _TK_EXIT_) umgebogenen 'exit' von Tk mit erledigt ;)
Ich habe das hier IIRC mal auch über Signal-Handler oder so gemacht, das könnte man noch zusätzlich einbauen ;)
$ perl -we ' use Tk; local $SIG{"TERM"} = \&ende; local $SIG{"INT"} = \&ende; $mw = new MainWindow; $mw->Button( -text => "Ferdsch", -command => \&ende )->pack; $mw->protocol("WM_DELETE_WINDOW", \&ende); MainLoop; 1; sub ende { print "Ende\n"; exit(0); } '
-dnh
Also, noch einmal recht herzlichen Dank. Karl Brandt -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mit, 17 Jan 2007, Karl Brandt schrieb:
David Haller wrote:
Das hat aber nur bedingt mit KDE zu tun. Unter anderen WMs läuft Tk ja auch. Ich hätte jetzt mit Perl/Qt gerechnet... [..] Perl/Qt ist das schöner, schneller, ....?
Kann sein, verwendet halt (wie KDE) Qt. Ist aber fast nicht dokumentiert. Und z.B. ein Callback bekomme ich gerade auch nicht hin. Mir ist's zu blöd, zumal sich da nur eine Version von verwenden läßt. Und ich habe hier Qt 1.4x und Qt 2.x (und Qt 3.x auf dem anderen Rechner). [..]
MainLoop; -1;
Wieso -1? Hatte ich irgendwo gelesen, dass -1 am Ende verhindert das ein Perlscript mal Amok läuft.
Das sollte eine 1 sein. Das ist ein "wahrer" Wert und dient als Signal, dass die Datei erfolgreich verarbeitet wurde. Ist v.a. bei Modulen relevant. -dnh -- The only difference in the game of love over the last few thousand years is that they've changed trumps from clubs to diamonds. -- The Indianapolis Star -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, [Nachtrag] Am Mit, 17 Jan 2007, David Haller schrieb:
Am Mit, 17 Jan 2007, Karl Brandt schrieb:
David Haller wrote: [..]
MainLoop; -1;
Wieso -1? Hatte ich irgendwo gelesen, dass -1 am Ende verhindert das ein Perlscript mal Amok läuft.
Das sollte eine 1 sein. Das ist ein "wahrer" Wert und dient als Signal, dass die Datei erfolgreich verarbeitet wurde. Ist v.a. bei Modulen relevant.
Eigentlich sollte (abgesehen von subs) nach dem 'MainLoop;' gar nix mehr stehen! -dnh -- I'm sorry, I can't be a Jehovah's Witness, as I didn't see Jehovah's accident. -- Chris Suslowicz -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
David Haller
-
Karl Brandt
-
Torsten Foertsch