python,tkinter:文本从剪贴板粘贴两次 - 为什么?

时间:2017-01-06 14:42:35

标签: python tkinter copy clipboard paste

我实施了标准副本&我编写的文本编辑器的粘贴功能,但似乎我没有正确理解tkinter中scrolledtext小部件的insert-method的行为:我的代码没有按照我期望的方式运行。

这是最小的例子。它是一个带有scrolledtext小部件的窗口,以及一个将示例文件“Test.txt”加载到文本小部件和结束按钮的按钮。副本&粘贴功能通过快捷方式ctrl-c,ctrl-v实现。在粘贴时,代码插入剪贴板的内容两次instaed为一,我绝对没有IDEA为什么。谁能告诉我我做错了什么?提前谢谢!

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()

1 个答案:

答案 0 :(得分:2)

这是因为 ctrl - c ctrl - v 已经实现。

因此,当您执行 ctrl - v 时,它会为已经实现的一次粘贴一次,为您的方法粘贴一次。只需删除整体绑定,或者如果您想在 ctrl - v 上执行某些操作,请在方法中删除insert