python 防止在tkinter中选中的文本被复制和粘贴

z9smfwbn  于 2023-05-16  发布在  Python
关注(0)|答案(1)|浏览(385)

我注意到EntryText小部件的一个“特性”,当鼠标中键单击时,任何选定的文本都将被复制(基本上是复制和粘贴)。我试图防止这种行为,因为我不想或不需要它为我的用例。

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.geometry('240x60')
entry = ttk.Entry(root)
entry.insert(0, 'Select me, then middle click!')
entry.pack(expand=True, fill='x', padx=20, pady=20)

if __name__ == '__main__':
    root.mainloop()

我尝试使用事件绑定覆盖中键单击,但似乎无法阻止此行为:

entry.bind('<Button-2'>, 'break')  # consume the middle-click event and bail
ecfdbz9o

ecfdbz9o1#

我最终使用'<Button-2>'绑定来清除文本选择,这似乎可以防止复制/粘贴

entry.bind('<Button-2>', lambda _e: entry.selection_clear())

我希望这对其他遇到这种情况的人有帮助!

  • 补遗 *:这种行为也出现在ttk.Spinbox小部件上,我怀疑 * 所有 * 小部件都有可编辑文本。通过在root窗口上使用类似的绑定,我能够全局地避免这个问题
root = tk.Tk()

root.bind_all('<Button-2>', lambda e: e.widget.selection_clear())

这样,任何带有可编辑文本的小部件都不会出现这个问题,并且您不必为每个小部件创建单独的事件绑定。

相关问题