Aktionen durchführen bei Programmende ?

Fragen zu Tkinter.
Antworten
Bruno Schäfer
User
Beiträge: 9
Registriert: Freitag 27. September 2002, 12:34
Kontaktdaten:

Mittwoch 2. Mai 2007, 13:22

Wie kann ich, wenn ich mein Programm über das Systemmenü in der Fenstertitelseite beende, d.h. wenn ich auf das Kreuzchen im Quadrat klicke (ich verwende Tkinter und Windows!), mein Programm veranlassen, dass es noch vor dem Ende eine Aktion durchführt, z.B. irgendwelche Daten abspeichert ?

Wenn ich versuche Daten hinter "tk.mainloop()" abzuspeichern, kommt eine Fehlermeldung:

"D:\Python25\lib\lib-tk\Tkinter.py", line 2962, in get
return self.tk.call(self._w, 'get', index1, index2)
TclError: invalid command name ".19197344.19197624.19182056.19182136"



Gruß
B.S.
joost
gelöscht
Beiträge: 134
Registriert: Sonntag 29. April 2007, 13:28

Mittwoch 2. Mai 2007, 14:04

Is n'bisschen her, dass ich TKinter verwendet habe (und so was nie gemacht). gtk hat für jedes widget gleich zwei Events: delete und destroy (nach delete abgesendet). Und TKinter wirklich gar nichts, nicht einmal für Toplevels ?

Workaround: Du produzierst eine 'bewachte' Variable und änderst deren Wert nur einmal - direkt vor Programmende.
___________________
Schlechte Software ist schlimmer als keine Software
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Mittwoch 2. Mai 2007, 18:42

Hi,

"WM_DELETE_WINDOW" ist dein Freund.
ein beispiel.

Code: Alles auswählen

import Tkinter as tk

class App( tk.Frame ):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.master = master
        b = tk.Button(self, text='Quit', command=self.onQuit)
        b.pack(expand=tk.YES, fill=tk.BOTH)
        
        
        self.master.protocol('WM_DELETE_WINDOW', self.onQuit)
        
    def onQuit(self):
        
        self.master.quit()

def _main():
    root = tk.Tk()
    app = App( root )
    app.pack(expand=tk.YES, fill=tk.BOTH)
    root.mainloop()
    
if __name__=='__main__':
    _main()
Gruss
pyStyler
Bruno Schäfer
User
Beiträge: 9
Registriert: Freitag 27. September 2002, 12:34
Kontaktdaten:

Mittwoch 2. Mai 2007, 20:13

Hallo pyStyler,

Danke für den Tipp.
Genau das habe ich gesucht !

Ich habe aber zwischenzeitlich bei Fredrik Lundh in
"An Introduction to Tkinter " auf http://www.pythonware.com
genau dieses 'WM_DELETE_WINDOW' gefunden.
Man muss halt mehr Geduld beim Suchen haben !

Danke trotzdem und
Gruß
B.S.
joost
gelöscht
Beiträge: 134
Registriert: Sonntag 29. April 2007, 13:28

Donnerstag 3. Mai 2007, 11:00

Ähmm, das mit der 'bewachten Variablen' oben war nix. :oops:

Übrigens hat jedes Widget ein Destroy-Event, siehe
http://infohost.nmt.edu/tcc/help/pubs/t ... types.html

___________________
Schlechte Software ist schlimmer als keine Software
Antworten