2016-03-20 7 views
0

私はPythonにはかなり新しく、ユーザーがキャンバスに直接テキストを入力できるtkinterを使ってプログラムを作成しようとしています。おそらく最も効率的な方法ではないにしても、私はこれをやってきました。私が抱えている問題は、ユーザーが望むならば、ユーザーが新しい行を取るためにリターンキーをバインドしようとすることです。この1を助けるためにチュートリアルを検索しましたが、これまでのところ何も働いていません。ここに私がこれまで持っていたコードがあります。返すキーにバインドするための 'new line'クラスの作成

from tkinter import * 

root = Tk() 

c = Canvas(root) 
c.pack() 
textvar = StringVar() 
t = c.create_text(100, 100, text='Press Ctrl E to enter text', anchor='nw',width=140) 

def edit_begin(event): 
    x, y = c.coords(t) 
    textvar.set(c.itemcget(t, 'text')) 
    e = Entry(c, width= 25, textvariable=textvar, bd=0, 
       highlightthickness=0, bg=c['bg']) 
    e.selection_range(0, 'end') 
    w = c.create_window(x, y, window=e, tags=('editwindow',), anchor='nw') 
    e.focus_set() 
    e.bind('<1>', edit_end) 
    e.bind('<Escape>', edit_cancel) 
    e.bind('<Return>', edit_n) 

def edit_cancel(event): 
    c.delete('editwindow') 
    event.widget.destroy() 
    c.focus_set() 

def edit_end(event): 
    c.itemconfigure(t, text=textvar.get()) 
    edit_cancel(event) 

def edit_n(event): 
    c.insert(t, END, "\n") 

c.bind('<Control-e>', edit_begin) 

c.focus_set() 
root.mainloop() 

は、新しい行を入力することができないリターンキーであるだけでなく、それはまた、この問題を解決する方法を把握しようと助けにはならない何らかのエラーと表示されません。

リターンキーに改行を入力できるようにするという主な問題や、コードの一般的なレイアウトを改善する方法についてのコメントがあれば幸いです。

答えて

関連する問題