2017-01-06 3 views
1

Я внедрил стандартную копию & вставку для текстового редактора, который я пишу, но, похоже, я неправильно понял поведение метода insert-method виджета scrolledtext в tkinter: мой код не ведет себя так, как я ожидал ,python, tkinter: текст дважды вставлен из буфера обмена - почему?

Здесь как минимальный пример. Это окно с виджлетом scrolledtext и кнопка, загружающая образец файла 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() 

ответ

2

Это потому, что Ctrl - с и Ctrl - v уже реализована.

Так что, когда вы делаете Ctrl - v, он вставляет один раз уже реализован один и один раз для вашего метода. Просто удалите привязку в целом или если вы хотите что-то сделать на ctrl - v, а затем удалить insert в свой метод.

Смежные вопросы