Tkinter: ustaw StringVar po zdarzeniu <Key>, w tym wciśnięty klawisz
Za każdym razem, gdy postać zostaje wpisana doText
widget, chcę pobrać zawartość tego widżetu i odjąć jego długość od pewnej liczby (zasadniczo „masz x znaków pozostawionych”).
AleStringVar()
zawsze jest jedno wydarzenie. To z tego, co zbieram, zdarzenie jest przetwarzane zanim znak zostanie wprowadzony do widgetu Tekst. Oznacza to, że jeśli mam 3 postacie w polu i wchodzę na 4, toStringVar
jest zaktualizowany, ale wciąż ma 3 znaki, a następnie aktualizuje do 4, gdy wprowadzam 5 znak.
Czy istnieje sposób na utrzymanie dwóch w kolejce?
Oto kod. Usunąłem nieistotne części.
def __init__(self, master):
self.char_count = StringVar()
self.char_count.set("140 chars left")
self.post_tweet = Text(self.master)
self.post_tweet.bind("<Key>", self.count)
self.post_tweet.grid(...)
self.char_count = Label(self.master, textvariable=self.foo)
self.char_count.grid(...)
def count(self):
self.x = len(self.post_tweet.get(1.0, END))
self.char_count.set(str(140 - self.x))