Fenster soll nach 1/2 Sek selbst schliessen

Fragen zu Tkinter.
egerlach
User
Beiträge: 41
Registriert: Samstag 14. März 2009, 21:32

Fenster soll nach 1/2 Sek selbst schliessen

Beitragvon egerlach » Sonntag 10. Mai 2009, 12:15

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
BlackJack

Beitragvon BlackJack » Sonntag 10. Mai 2009, 13:19

@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.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

Beitragvon Pascal » Sonntag 10. Mai 2009, 15:32

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)
egerlach
User
Beiträge: 41
Registriert: Samstag 14. März 2009, 21:32

Beitragvon egerlach » Sonntag 10. Mai 2009, 22:49

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
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Beitragvon derdon » Sonntag 10. Mai 2009, 23:37

Du kannst auch lambda benutzen. Wichtig ist nur, das auf eine Funktion verwiesen wird (ob die einen Namen hat oder nicht, ist egal).

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder