如何在tkinter输入字段上禁用复制和粘贴。我尝试使用:
self.ent_city = Tkinter.Entry(bd='4',width='32', state='readonly')
但是这个命令几乎与state = 'disabled'
相似。我想在我的条目小部件上禁用复制/粘贴或剪切/粘贴。
任何帮助将不胜感激。 提前致谢
答案 0 :(得分:4)
您可以将按键和右键单击绑定在一起,如下所示:
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了解详情。
答案 1 :(得分:0)
我认为没有正式的方法可以在tkinter中禁用剪切/复制/粘贴(非常烦人),并且在XWayland上调用self.ent.bind('<Control-v>', lambda e:'break')
似乎不起作用(tkinter在Xorg上的x11中运行,或者Wayland上的XWayland)
我已经尝试过self.ent.unbind('<<paste>>')
,但这也没有帮助。
一个可行的办法是绑定您自己的函数以粘贴,在其中,将剪贴板清空为字符串,然后在20ms超时后再次填充它,这样,当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))