python,tkinter:从剪贴板粘贴文本两次 - 为什么?
python, tkinter: text is pasted twice from clipboard - why?
我为我编写的文本编辑器实现了标准的复制和粘贴功能,但我似乎没有正确理解 tkinter 中滚动文本小部件的插入方法的行为:我的代码不符合要求我希望。
这里是最小的例子。它是一个 window,带有滚动文本小部件和一个将示例文件 "Test.txt" 加载到文本小部件的按钮和一个结束按钮。复制和粘贴功能是通过快捷键 ctrl-c、ctrl-v 实现的。在粘贴时,代码将剪贴板的内容插入两次而不是一次,我完全不知道为什么。谁能告诉我我做错了什么?提前致谢!
import tkinter, tkinter.scrolledtext
def ende():
main.destroy()
def loadSampleFile():
d=open("Test.txt")
z=d.readline()
while z:
t.insert("end",z)
z=d.readline()
d.close()
def paste(event_obj):
text2paste=t.selection_get(selection='CLIPBOARD')
print(t.clipboard_get())
t.insert('insert',text2paste)
def copy2clipboard(event_obj):
text2copy=t.get(tkinter.SEL_FIRST,tkinter.SEL_LAST)
t.clipboard_clear()
t.clipboard_append(text2copy)
main=tkinter.Tk()
t=tkinter.scrolledtext.ScrolledText(main, width=40, height=1)
t.pack()
t.bind('<Control-c>',copy2clipboard)
t.bind('<Control-v>',paste)
bshow=tkinter.Button(main, text="Show File", command=loadSampleFile)
bshow.pack()
bende=tkinter.Button(main, text="end", command=ende)
bende.pack()
main.mainloop()
是因为ctrl-c和ctrl-v 已经实施。
因此,当您执行 ctrl-v 时,它会为已实现的方法粘贴一次,并为您的方法粘贴一次。只需删除整体绑定,或者如果您想在 ctrl-v 上执行某些操作,则在您的方法中删除 insert
。
我为我编写的文本编辑器实现了标准的复制和粘贴功能,但我似乎没有正确理解 tkinter 中滚动文本小部件的插入方法的行为:我的代码不符合要求我希望。
这里是最小的例子。它是一个 window,带有滚动文本小部件和一个将示例文件 "Test.txt" 加载到文本小部件的按钮和一个结束按钮。复制和粘贴功能是通过快捷键 ctrl-c、ctrl-v 实现的。在粘贴时,代码将剪贴板的内容插入两次而不是一次,我完全不知道为什么。谁能告诉我我做错了什么?提前致谢!
import tkinter, tkinter.scrolledtext
def ende():
main.destroy()
def loadSampleFile():
d=open("Test.txt")
z=d.readline()
while z:
t.insert("end",z)
z=d.readline()
d.close()
def paste(event_obj):
text2paste=t.selection_get(selection='CLIPBOARD')
print(t.clipboard_get())
t.insert('insert',text2paste)
def copy2clipboard(event_obj):
text2copy=t.get(tkinter.SEL_FIRST,tkinter.SEL_LAST)
t.clipboard_clear()
t.clipboard_append(text2copy)
main=tkinter.Tk()
t=tkinter.scrolledtext.ScrolledText(main, width=40, height=1)
t.pack()
t.bind('<Control-c>',copy2clipboard)
t.bind('<Control-v>',paste)
bshow=tkinter.Button(main, text="Show File", command=loadSampleFile)
bshow.pack()
bende=tkinter.Button(main, text="end", command=ende)
bende.pack()
main.mainloop()
是因为ctrl-c和ctrl-v 已经实施。
因此,当您执行 ctrl-v 时,它会为已实现的方法粘贴一次,并为您的方法粘贴一次。只需删除整体绑定,或者如果您想在 ctrl-v 上执行某些操作,则在您的方法中删除 insert
。