每次将字符输入到Text
窗口小部件时,我都希望获取该窗口小部件的内容,并从某个数字中减去其长度(基本上是“剩下x个字符”)。
但是,StringVar()
这始终是背后的事件。根据我的收集,这是因为在字符输入到“文本”小部件中之前已处理了事件。这意味着,如果我在该字段中输入StringVar
3个字符,然后输入第4个字符,则该字符将被更新,但仍为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))
一个简单的解决方案是在类绑定之后添加新的bindtag。这样,类绑定将在绑定之前触发。见这个答案的问题如何Tkinter的文本小部件绑定自事件发生后,将通过文本控件绑定?举个例子
该答案使用输入小部件而不是文本小部件,但是绑定标记的概念在这两个小部件之间是相同的。只要确保使用Text
而不是Entry
适当的地方即可。
另一个解决方案是在KeyRelease上进行绑定,因为默认绑定发生在KeyPress上。
这是显示如何使用绑定标签的示例:
import Tkinter as tk
class Example(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.post_tweet = tk.Text(self)
bindtags = list(self.post_tweet.bindtags())
bindtags.insert(2, "custom") # index 1 is where most default bindings live
self.post_tweet.bindtags(tuple(bindtags))
self.post_tweet.bind_class("custom", "<Key>", self.count)
self.post_tweet.grid()
self.char_count = tk.Label(self)
self.char_count.grid()
def count(self, event):
current = len(self.post_tweet.get("1.0", "end-1c"))
remaining = 140-current
self.char_count.configure(text="%s characters remaining" % remaining)
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(side="top", fill="both", expand=True)
root.mainloop()
本文向大家介绍Python tkinter之Bind(绑定事件)的使用示例,包括了Python tkinter之Bind(绑定事件)的使用示例的使用技巧和注意事项,需要的朋友参考一下 1、绑定鼠标事件并获取事件属性 2、绑定键盘事件并获取事件属性 以上就是Python tkinter之Bind(绑定事件)的使用示例的详细内容,更多关于python tkinter Bind(绑定事件)的资料请关注呐
在 imi 中,使用模型关联时,提供了监听前置和后置事件的方法,让开发者可以更加灵活地做一些自定义处理。 事件 插入事件 前置事件名: IMI.MODEL.RELATION.INSERT.模型类名.模型属性名.BEFORE 后置事件名: IMI.MODEL.RELATION.INSERT.模型类名.模型属性名.AFTER 事件参数: 参数名 类型 描述 model string 模型类名 prop
问题内容: 我有以下功能,用于页面修饰,仅在加载所有图像后才显示: 问题在于缓存的图像无法触发事件,因此不能减小缓存的图像。 我知道我需要实施NickCraver的解决方案,但不确定如何实现。谁能帮我? 问题答案: 好的,设法将它们合并: 注意:带有404像素的图片会破坏此效果。
主要内容:事件绑定方法,常用事件类型,Event事件对象事件处理,是 GUI 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器“正常”运转的关键所在,它能够将零部件之间“优雅”的贯穿起来,因此“事件处理”可谓是 GUI 程序的“灵魂”,同时它也是实现人机交互的关键。 对于“事件”这一名词,在讲解控件时也偶尔提及过,在本节我们将对 Tkinter 中的事件处理机制做更为详细的介绍。 在一款 GUI 程序中
Button 控件是 Tkinter 中常用的窗口部件之一,同时也是实现程序与用户交互的主要控件。通过用户点击按钮的行为来执行回调函数,是 Button 控件的主要功用。首先自定义一个函数或者方法,然后将函数与按钮关联起来,最后,当用户按下这个按钮时,Tkinter 就会自动调用相关函数。 按钮控件使用起来非常简单,它同样可以包含文本、图像、位图,并通过 参数回调函数。当然按钮也并非一定要执行回调
我正在尝试使用Python创建一个简单的Tkinter GUI。用户界面有3个不同的按钮:是、否和打印。 如果用户单击“是”,然后单击“打印”,将出现一行“是1”。 如果用户取消单击“是”,然后单击“否”,然后单击“打印”,则会出现一行“否为0”。 但是程序怎么能够跟踪用户点击哪个按钮呢?我可以用哪个功能来找到这两个相关按钮之间的联系?代码是如何执行的? 太感谢你了!