Seite 1 von 1

Entry / Textfarbe kurzfristig umsetzen

Verfasst: Dienstag 16. Januar 2007, 09:25
von jmurauer
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!

Verfasst: Dienstag 16. Januar 2007, 11:36
von mawe
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

Verfasst: Montag 22. Januar 2007, 10:18
von Ene Uran
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()