Seite 1 von 1

Fenster soll nach 1/2 Sek selbst schliessen

Verfasst: Sonntag 10. Mai 2009, 12:15
von egerlach
Hallo,
im Rahmen eines im Hintergrund werkelnden Sicherheitsmechanismuss poppen immer wieder seitlich Fenster auf die entweder mit Klick auf Button "OK" oder "erledigt" geschlossen werden, teilweise aber nur flüchtige Okay-Meldungen sind und sich selbst nach ca. 1/2 Sekunde beenden sollen.

Wie realisiere ich diese sich selbst schließen? - Habe schon in diesem Forum gesucht, time.sleep(.5) wartet 1/2 Sekunde, aber es soll ja erst das Fenster angezeigt werden, DANN erst die halbe Sekunde ablaufen.

Gruss
Eckard

Verfasst: Sonntag 10. Mai 2009, 13:19
von BlackJack
@egerlach: Schau Dir mal die `after()`-Methode auf Widgets an.

Edit: Noch als Anmerkung: Solche Fenster halte ich für ziemlich unbrauchbar bis störend. Wenn man mal länger nicht hinschaut, bekommt man nichts mit, und wenn man gerade auf OK klicken will, wenn das Fenster automatisch verschwindet, klickt man auf sonstwas in dem Fenster darunter. Das kann böse Überraschungen zur Folge haben.

Verfasst: Sonntag 10. Mai 2009, 15:32
von Pascal
hier ein Bsp. für die after-Methode

Code: Alles auswählen

import Tkinter as Tk

win=Tk.Tk()
win.minsize(200,200)
win.after(1500, win.destroy)

Verfasst: Sonntag 10. Mai 2009, 22:49
von egerlach
Besten Dank für den Hinweis, ich hatte alle möglichen Varianten getestet, aber exakt Deine nicht. Nach vielen Versuchen mit lambda, command=, print_ok(), ... weiss ich auch jetzt auch wie eine Funktion in after() aufrufbar ist: nämlich ohne lambda, command, oder ():

Code: Alles auswählen

def print_ok():
     print "ok"
     root.quit()

[...]
root.after(500, print_ok)
mit quit anstelle von destroy gehts auch, sieht sanfter aus ;-)
500 sind Millisekunden, hier 1/2 Sekunde.

Danke an alle Mitdenker, Eckard

Verfasst: Sonntag 10. Mai 2009, 23:37
von derdon
Du kannst auch lambda benutzen. Wichtig ist nur, das auf eine Funktion verwiesen wird (ob die einen Namen hat oder nicht, ist egal).