在Tkinter条目中禁用复制粘贴操作。

问题描述 投票:0回答:2

怎样才能禁止在tkinter输入栏上复制和粘贴。我试过使用。

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

但这个命令几乎和 state = 'disabled' . 我想在我的条目小部件上禁用Copypaste或CutPaste。

任何帮助将被感激...!提前感谢

python tkinter
2个回答
5
投票

你可以像这样绑定按键和右键点击。

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。 获取更多信息。


0
投票

我想在 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))
© www.soinside.com 2019 - 2024. All rights reserved.