Entry / Textfarbe kurzfristig umsetzen

Fragen zu Tkinter.
Antworten
jmurauer
User
Beiträge: 8
Registriert: Mittwoch 22. November 2006, 14:31

Hallo,
ich habe ein Entry-Widget. Dort soll ein Zahl > 0 eingeben werden. Macht der Anwender was falsch, möchte ich dort einen Hinweis in rot ausgeben und dann die Farbe für zukünftige Eingaben sofort wieder auf schwarz setzen.

Ich mache das mit diesem Code:

Code: Alles auswählen

            
self.k_entry.delete(0, Tkinter.END)
self.k_entry.configure(fg="red")
self.k_entry.insert(0, "<Zahl größer 0 eingeben>")    
self.k_entry.configure(fg="black")            
self.master.bell()
Aber folgendes passiert:
a) Wenn ich die Zeile
self.k_entry.configure(fg="black")
auskommentiere, erscheint die Meldung in rot, aber alle zukünftigen Eingabe auch

b) Wenn die die Zeile
self.k_entry.configure(fg="black")
drinnen lassem erscheint auch die Meldung in schwarz - obwohl ich die Farbe vorher auf rot setze!!!

Was ist da los, wie kann man es lösen?

Danke sehr!
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Es funktioniert schon, aber viel zu schnell. Du könntest ein sleep() einbauen:

Code: Alles auswählen

import Tkinter as tk
import time

def color_change():
    e.configure(fg="red")
    root.update()
    time.sleep(2)
    e.configure(fg="black")

root = tk.Tk()

e = tk.Entry()
e.pack()

tk.Button(text="Blabla", command=color_change).pack()

root.mainloop()
Wenn du time.sleep() auskommentierst, passiert (scheinbar) auch nix, oder? Wie gesagt, zu schnell.

Gruß, mawe
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Du kannst auch Tkinter selbst warten lassen:

Code: Alles auswählen

import Tkinter as tk

def color_change():
    e.configure(fg="red")
    root.update()
    # after 2000 ms go back to black
    root.after(2000, e.configure(fg="black"))

root = tk.Tk()

e = tk.Entry()
e.pack()
e.focus_set()

tk.Button(text="Blabla", command=color_change).pack()

root.mainloop()
Atomkraftwerkaktienbesitzer
Antworten