【发布时间】:2013-04-02 18:36:53
【问题描述】:
每次将字符输入Text 小部件时,我都想获取该小部件的内容并从某个数字中减去其长度(基本上是“您还剩 x 个字符”的交易)。
但StringVar() 总是落后一个事件。据我所知,这是因为事件是在字符输入到 Text 小部件之前处理的。这意味着如果我在字段中有 3 个字符并且我输入了第 4 个字符,StringVar 会更新但仍然是 3 个字符长,然后当我输入第 5 个字符时它会更新为 4 个字符。
有没有办法让两者保持一致?
这里有一些代码。我删除了不相关的部分。
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))
【问题讨论】:
-
你能贴一些代码吗?很难在没有看到任何东西的情况下理解您想要什么以及您尝试过什么。
-
不,
StringVar不是一个事件。问题是<Key>事件的默认处理程序(更新变量的处理程序)在您的处理程序之后运行,而不是之前。您可以看到这是您在<Key>事件之后从任何其他事件中检查变量。 -
我想你可能还有另一个问题。 IIRC,默认的
Text小部件末尾有一个隐式换行符。所以,当你这样做self.post_tweet.get(1.0, END))时,你不会也得到一个字符太多吗?
标签: python tkinter text-widget