【问题标题】:Disabling Copy/Paste action from the Tkinter entry从 Tkinter 条目禁用复制/粘贴操作
【发布时间】:2014-02-21 12:19:29
【问题描述】:

如何禁用 tkinter 输入字段上的复制和粘贴。我尝试使用:

self.ent_city = Tkinter.Entry(bd='4',width='32', state='readonly')

但此命令与 state = 'disabled' 几乎相似。我想在我的条目小部件上禁用复制/粘贴或剪切/粘贴。

任何帮助将不胜感激。! 提前致谢

【问题讨论】:

  • 我很确定使用Entry 小部件是不可能的,因为Entry 小部件的全部意义在于您在其中输入了一些内容-因此不可能本地化不进行剪切/复制/粘贴到那个小部件。

标签: python tkinter


【解决方案1】:

您可以像这样绑定按键和右键单击:

from Tkinter import *

class App(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.pack()
        self.ent = Entry(self, width=15)
        self.ent.pack()

        self.ent.bind('<Control-x>', lambda e: 'break') #disable cut
        self.ent.bind('<Control-c>', lambda e: 'break') #disable copy
        self.ent.bind('<Control-v>', lambda e: 'break') #disable paste
        self.ent.bind('<Button-3>', lambda e: 'break')  #disable right-click

root = Tk()
app = App()
mainloop()

这不是万无一失的,但我认为这是一个不错的解决方案。更多信息请查看http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

【讨论】:

  • 这不是好的编程习惯。尝试解决问题的方法很简单。
  • @Anonymous Care 详细说明?
  • 这只是禁用某些键盘组合和右键单击。这不考虑修改的键盘快捷键、交换鼠标按钮和许多其他使用复制和粘贴的方式。更好的方法可能是阻止在条目中输入文本的所有形式,可打印字符(字母、数字、常见符号,如! 和 @ 和退格)除外,以消除所有复制粘贴方法。
【解决方案2】:

我认为没有官方方法可以在 tkinter 中禁用剪切/复制/粘贴(非常烦人),并且调用 self.ent.bind('&lt;Control-v&gt;', lambda e:'break') 在 XWayland 上似乎不起作用(tkinter 在 Xorg 上的 x11 或 XWayland 上运行韦兰) 我试过self.ent.unbind('&lt;&lt;paste&gt;&gt;'),但这也无济于事。

似乎可行的方法是将您自己的函数绑定到粘贴,在其中将剪贴板清空为字符串,然后在 20 毫秒超时后再次填充,这样,当 tkinter 粘贴时,它什么也不粘贴。这并不理想,因为剪贴板上的任何图像或 html 都会被弄乱。此外,如果剪贴板为空,您必须捕获错误。

self.ent.bind('<Control-v>', self.paste)
def paste(self, event):
    try: s = self.ent.clipboard_get()
    except: s = ''
    self.ent.clipboard_clear()
    #any other code you want to run on paste here
    self.ent.after(20, lambda: self.ent.clipboard_append(s))

【讨论】:

    猜你喜欢
    • 2014-08-16
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多