为什么在 Python 的 Tkinter 中绑定 <<ListboxSelect>> 会在双击 Entry 小部件时虚假触发?
Why does <<ListboxSelect>> binding in Python's Tkinter trigger spuriously when double clicking an Entry widget?
作为较大代码块的一部分,我发现了 tkinter 列表框绑定的一个奇怪之处。下面的代码给出了问题的细分。使用 'listboxselected' 绑定列表框时,在该列表框中选择一个项目,然后左键双击条目,将触发一次 listboxselected 事件。
我已经在 python 3.3.2、3.6.3 和 3.7.1 中对此进行了测试。该错误仅发生在后两个版本中。我已经检查了文档,但找不到导致此问题的任何更新。有谁知道为什么会发生这种行为?
from tkinter import Tk, Listbox, Entry, Button
from functools import partial
root = Tk()
myList = Listbox(root)
myList.insert("end", "spam", "eggs", "chips")
myList.pack()
myList.bind("<<ListboxSelect>>", partial(print))
myEntry = Entry(root)
myEntry.pack()
我无法在 OSX 上复制它,但我的猜测是,当您在条目中双击时,条目中的文本会被 selected。当文本被 selected 时(即使 select 没有任何内容),列表框中的项目也会被删除 selected。 de-select离子触发绑定。
如果您希望列表框和条目中都包含内容 selected,请在列表框中设置 exportselection=False
。
作为较大代码块的一部分,我发现了 tkinter 列表框绑定的一个奇怪之处。下面的代码给出了问题的细分。使用 'listboxselected' 绑定列表框时,在该列表框中选择一个项目,然后左键双击条目,将触发一次 listboxselected 事件。
我已经在 python 3.3.2、3.6.3 和 3.7.1 中对此进行了测试。该错误仅发生在后两个版本中。我已经检查了文档,但找不到导致此问题的任何更新。有谁知道为什么会发生这种行为?
from tkinter import Tk, Listbox, Entry, Button
from functools import partial
root = Tk()
myList = Listbox(root)
myList.insert("end", "spam", "eggs", "chips")
myList.pack()
myList.bind("<<ListboxSelect>>", partial(print))
myEntry = Entry(root)
myEntry.pack()
我无法在 OSX 上复制它,但我的猜测是,当您在条目中双击时,条目中的文本会被 selected。当文本被 selected 时(即使 select 没有任何内容),列表框中的项目也会被删除 selected。 de-select离子触发绑定。
如果您希望列表框和条目中都包含内容 selected,请在列表框中设置 exportselection=False
。