怎样才能禁止在tkinter输入栏上复制和粘贴。我试过使用。
self.ent_city = Tkinter.Entry(bd='4',width='32', state='readonly')
但这个命令几乎和 state = 'disabled'
. 我想在我的条目小部件上禁用Copypaste或CutPaste。
任何帮助将被感激...!提前感谢
你可以像这样绑定按键和右键点击。
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.orgtkinterbooktkinter-events-and-bindings.htm。 获取更多信息。
我想在 tkinter 中没有官方的方法来禁用 cutcopypaste (非常烦人),而调用 self.ent.bind('<Control-v>', lambda e:'break')
似乎在XWayland上不工作(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))