当前位置: 首页 > 面试题库 >

Python-关于Tkinter中的绑定标签的基本查询

顾嘉德
2023-03-14
问题内容

在这篇文章的给定示例中,提到如果使用默认绑定标记,则事件值在html" target="_blank">定义内部将不可见(将滞后一个)。

关于类绑定有一些解释。
我是一个初学者,所以想了解详细的原因。
能否请你解释一下为什么它在第一种情况下不起作用而在第二种情况下(修改绑定标签的顺序时)为何起作用。

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()

问题答案:

当你对窗口小部件进行绑定时,实际上并没有绑定到窗口小部件本身。当你这样做时mywidget.bind(...),实际发生的是绑定与具有与小部件相同名称的绑定标签相关联。

当检测到事件时,Tkinter首先确定哪个窗口小部件拦截了该事件。该窗口小部件将具有与之关联的零个或多个(默认值:四个)绑定标签的列表。Tkinter将检查每个标签,以查看是否存在与事件匹配的绑定。如果找到一个,它将执行绑定,然后继续执行下一个标记,直到用完标记或绑定的函数之一返回string为止"break"

该序列如下所示:

  1. 你按“ x”键。此时,“ x”尚未插入任何位置
  2. Tkinter获取具有键盘焦点的小部件的绑定标签。
  3. 默认情况下,第一个绑定标签是小部件本身。该标签上有绑定吗?如果是这样,请执行它。例如,你可以打印窗口小部件的内容。因为尚未触发其他绑定,所以“ x”将不属于内容。
  4. 如果绑定的函数返回,”break”则不再进行事件处理。“ x”将不会插入到小部件中。
  5. 如果窗口小部件未返回”break”,则tkinter进入下一个绑定标记。
  6. 默认情况下,下一个绑定标签是小部件类。在与该事件匹配的类上是否存在绑定(按字母“ x”的键)?
  7. 在这种情况下,该类确实具有此事件的绑定,该绑定实际上是将“ x”插入到小部件中。到目前为止,“ x”仍未插入小部件中。但是,在此绑定之后,如果你打印了内容,则会看到“ x”
  8. 以这种方式继续处理,直到所有绑定标签都已处理完毕。
    根据评论部分中正在进行的讨论,似乎还不清楚。我将尝试使其尽可能简单:

是类绑定,它将一个字符从内存中的事件对象复制到窗口小部件,从而使它出现在屏幕上。在类绑定触发之前,角色将不会出现在小部件中。类绑定之后,它将在小部件中。



 类似资料:
  • 在本文给出的示例中,提到如果使用默认BindTag,那么事件值在定义中将不可见(将有一个延迟)。 关于类绑定有一些解释<我是初学者,所以想了解详细的原因 请解释为什么它在第一种情况下不起作用,而在第二种情况下起作用(当bindtags的顺序被修改时)。

  • 问题内容: 是否可以将JavaFX Slider的Double-Value绑定到Label?我想得到这样的东西: 谢谢您的帮助。 问题答案: 假设您有一个返回a 的属性访问器方法,则可以执行 如果要使用Formatting String格式化字符串 ,请执行以下操作

  • 本文向大家介绍Python基于Tkinter实现的记事本实例,包括了Python基于Tkinter实现的记事本实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python基于Tkinter实现的记事本。分享给大家供大家参考。具体如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 问题内容: 起作用但是 没有。 我无法在python中绑定+ 。是否有所有可能按键的文档? 问题答案: 用途: 我没有指向这些事件名称的完整列表的链接。这是我收集的部分清单:

  • 是否可以将JavaFX滑块中的双精度值绑定到标签?我想得到这样的东西: 谢谢你的帮助。

  • 在本章中,您将了解各种类型的基本JSF标记。 JSF提供标准的HTML标记库。 这些标记将呈现为相应的html输出。 对于这些标记,您需要在html节点中使用以下URI名称空间。 <html xmlns = "http://www.w3.org/1999/xhtml" xmlns:h = "http://java.sun.com/jsf/html" > 以下是JSF 2.0中重