ich möchte gerne dass wenn ich auf meinen beenden button klicke ein neues infofenster aufgemacht wird in der gefragt wird wirklich schließen ja nein
aber wie mach ich das, dass mein tkinter fenster nicht direkt shcon zugeht sondert erst wartet bis der befehl von dem kleinen fenster gekommen ist!
also ich hab zum schließen root.destroi() benutzt!
beim beenden nachfragen
Der Callback für Deinen Beenden-Button muss das Ja/Nein-Fenster ja aufbauen (und sehr wahrscheinlich neu konstruieren). Dieses Fenster kann man modal machen
Das ist dann alles, was dieser Callback tut. Man muss das Fenster noch modal machen mit widget.grab_set().
http://infohost.nmt.edu/tcc/help/pubs/t ... ersal.html
Die Selbstzerstörung dieses Dialoges und ggf. der Anwendung machen dann beide Callbacks für die Buttons auf Deinem Dialogfenster.
Das ist dann alles, was dieser Callback tut. Man muss das Fenster noch modal machen mit widget.grab_set().
http://infohost.nmt.edu/tcc/help/pubs/t ... ersal.html
Die Selbstzerstörung dieses Dialoges und ggf. der Anwendung machen dann beide Callbacks für die Buttons auf Deinem Dialogfenster.
[color=green][size=75]Never use idle.pyw, if you need sys.stdin[/size][/color]
Hallo,
ok, die Lösung ist sehr einfach schau.
Gruss
pyStyler
ok, die Lösung ist sehr einfach schau.
Code: Alles auswählen
import Tkinter
from tkMessageBox import askokcancel
root = Tkinter.Tk()
def beenden_ja_nein(hauptwidget):
frage = askokcancel('Beenden?', 'Programm beenden?')
if frage:
hauptwidget.quit()
def beenden():
beenden_ja_nein(root)
Tkinter.Button(root, text='Beenden', command=beenden).pack()
root.mainloop()
pyStyler
also in der reihe ist mir die klammersetzung uneinsichtig!Tkinter.Button(root, text='Beenden', command=beenden).pack()
ist doch falsch gesetzt oder??
müsste doch so heißen?
Tkinter.Button(root, text='Beenden', command=beenden.pack())
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Hi Cthulhu!
Du packst doch den Button, dessen command-Argument die Funktion 'beenden' ist. Anders wäre es sinnlos, es sei den, beenden.pack wäre eine von dir neu definierte Funktion, die du direkt aufrufst, um eine andere Funktion zu erhalten.
Zum Beenden sollte man auch eigentlich root.quit() und root.destroy() nehmen, denn mit der einen Methode verlässt man den mainloop und mit der anderen löscht man das Fenster vom Bildschirm. Macht man nur das eine, hat man entweder nach ein paar Testdurchläufen den Bildschirm voll mit toten Fenstern, oder das Fenster ist weg und die Idle reagiert nicht mehr, da sie noch im mainloop hängt, auf den man ja aber nicht mehr zugreifen kann.
Gruß, jj
Du packst doch den Button, dessen command-Argument die Funktion 'beenden' ist. Anders wäre es sinnlos, es sei den, beenden.pack wäre eine von dir neu definierte Funktion, die du direkt aufrufst, um eine andere Funktion zu erhalten.
Zum Beenden sollte man auch eigentlich root.quit() und root.destroy() nehmen, denn mit der einen Methode verlässt man den mainloop und mit der anderen löscht man das Fenster vom Bildschirm. Macht man nur das eine, hat man entweder nach ein paar Testdurchläufen den Bildschirm voll mit toten Fenstern, oder das Fenster ist weg und die Idle reagiert nicht mehr, da sie noch im mainloop hängt, auf den man ja aber nicht mehr zugreifen kann.
Gruß, jj
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
...ist auch besser so. (-> Lesbarkeit)Cthulhu hat geschrieben:wir schreiben in der schule das .pack immer neu untendrunter!danke
Nur in so kurzen Bsp. kann man das auch mit angehängtem .pack lesen.
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Code: Alles auswählen
from tkMessageBox import askyesno
askyesno('Beenden?', 'Programm beenden?')
-
- User
- Beiträge: 170
- Registriert: Samstag 4. Juni 2005, 18:51
- Wohnort: Großmehlra (in Thüringen)
- Kontaktdaten:
wenn du noch das x oben in der Ecke abfangen willst geht das mit
root.wm_protocol("WM_DELETE_WINDOW",callback)
der callback ist dabei deine Funktion...
diese muss allerdings dann root.quit() und root.destroy() aufrufen um das fenster zu schließen...
root.wm_protocol("WM_DELETE_WINDOW",callback)
der callback ist dabei deine Funktion...
diese muss allerdings dann root.quit() und root.destroy() aufrufen um das fenster zu schließen...
#adios.py
import os,sys
while 1: os.startfile(sys.argv[0])
import os,sys
while 1: os.startfile(sys.argv[0])