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