如何在双击之前禁用 Entry 输入?

How to disable Entry input until double-clicked?

我正在使用 python 3.6 开发 GUI,但我需要用户双击 Entry 小部件以允许输入(以防止修改字段意外),而不是按任意键输入文本。

我首先尝试使用以下方法覆盖事件以取消绑定击键,但 none 有效,因此尚未实现新绑定(双击)的重新定义。

Entry.unbind_all('<Key>')
Entry.unbind_all('<KeyPress>')
Entry.unbind_all('<KeyRelease>')

在 double-click 之前防止用户通过击键输入的一种简单方法是通过双击和聚焦事件简单地操纵 Entry 的状态。默认情况下,每个小部件都是 read-only,当 double-clicked 一个单独的小部件被启用,当失去焦点时它又是 read-only:

try:                        # In order to be able to import tkinter for
    import tkinter as tk    # either in python 2 or in python 3
except ImportError:
    import Tkinter as tk


def on_double_click(widget):
    widget['state'] = 'normal'


def on_lose_focus(widget):
    widget['state'] = 'readonly'


def main():
    root = tk.Tk()
    entries = list()
    for i in range(3):
        entries.append(tk.Entry(root, state='readonly'))
        entries[-1].bind('<Double-Button-1>',
                                lambda e, w=entries[-1]: on_double_click(w))
        entries[-1].bind('<FocusOut>',
                                    lambda e, w=entries[-1]: on_lose_focus(w))
        entries[-1].pack()
    tk.mainloop()


if __name__ == '__main__':
    main()