在这篇文章的给定示例中,有人提到如果使用默认的bindtags,那么事件值在定义内部将不可见(将滞后一个).
关于类绑定有一些解释.
我是初学者,所以想了解详细原因.
有些人可以解释为什么它在第一种情况下没有工作并且在第二种情况下工作(当修改bindtags的顺序时).
import Tkinter
def OnKeyPress(event):
value = event.widget.get()
string="value of %s is '%s'" % (event.widget._name, value)
status.configure(text=string)
root = Tkinter.Tk()
entry1 = Tkinter.Entry(root, name="entry1")
entry2 = Tkinter.Entry(root, name="entry2")
entry3 = Tkinter.Entry(root, name="entry3")
entry1.bindtags(('.entry1', 'Entry', '.', 'all'))
entry2.bindtags(('Entry', '.entry1', '.', 'all'))
entry3.bindtags(('.entry1','Entry','post-class-bindings', '.', 'all'))
btlabel1 = Tkinter.Label(text="bindtags: %s" % " ".join(entry1.bindtags()))
btlabel2 = Tkinter.Label(text="bindtags: %s" % " ".join(entry2.bindtags()))
btlabel3 = Tkinter.Label(text="bindtags: %s" % " ".join(entry3.bindtags()))
status = Tkinter.Label(anchor="w")
entry1.grid(row=0,column=0)
btlabel1.grid(row=0,column=1, padx=10, sticky="w")
entry2.grid(row=1,column=0)
btlabel2.grid(row=1,column=1, padx=10, sticky="w")
entry3.grid(row=2,column=0)
btlabel3.grid(row=2,column=1, padx=10)
status.grid(row=3, columnspan=2, sticky="w")
entry1.bind("<KeyPress>", OnKeyPress)
entry2.bind("<KeyPress>", OnKeyPress)
entry3.bind_class("post-class-bindings", "<KeyPress>", OnKeyPress)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
Bry*_*ley 14
在窗口小部件上执行绑定时,实际上并不是绑定到窗口小部件本身.当你这样做时mywidget.bind(...),实际发生的是绑定与一个与小部件同名的绑定标记相关联.
当检测到事件时,Tkinter首先确定哪个小部件拦截了该事件.此小部件将具有与之关联的零个或多个(默认情况下为四个)绑定标记的列表.Tkinter将检查每个标签,以查看是否存在与事件匹配的绑定.如果找到一个,它将执行绑定,然后继续下一个标记,直到它用完标记或其中一个绑定函数返回字符串"break".
序列看起来像这样:
"break"则不再执行事件处理."x"不会插入到窗口小部件中."break",则tkinter将继续执行下一个绑定标记.根据评论部分正在进行的讨论,似乎仍然不清楚.我会尝试尽可能简单:
它是类绑定,它将字符从内存事件对象复制到窗口小部件,从而使其出现在屏幕上.在类绑定触发之前,该字符不会出现在窗口小部件中.类绑定后,它将在窗口小部件中.
| 归档时间: |
|
| 查看次数: |
3859 次 |
| 最近记录: |