2017-02-06 12 views
1

キープレスイベントをLabelにバインドしてテキストを変更したい場合、最初の反応はbuttonpressをラベルにバインドし、ラベルを青色にし、キー押しをラベル。それは最も基本的なだで
、それは次のようになります。驚いたことにtkinter - ラベルにkeypressイベントをバインドする

from tkinter import * 
root = Tk() 
frame = Frame(root) 
frame.pack() 

def prep(event): 
    event.widget.config(bg='light blue') 
    event.widget.bind('<Key>', edit) 

def edit(event): 
    print(event.char) 

example = Label(frame, text='Click me') 
example.pack() 
example.bind('<Button-1>', prep) 
mainloop() 

、にButtonPressイベントは、ラベルを着色、罰金働いたが、キー押下は、その後何もしませんでした。 event.widgetのbindbind_allに置き換えることは技術的には解決しますが、明らかにこれは実用的ではありません。
みんなありがとう

答えて

2

それがキーボードフォーカスを持っていないため、キー押下イベントを受け取る(クリックしたときにラベルがキーボードフォーカスを取得していない)ので、あなたがそれをfocus_set方法でピント与える必要はありませんラベル:

from tkinter import * 
root = Tk() 
frame = Frame(root) 
frame.pack() 

def prep(event): 
    event.widget.config(bg='light blue') 
    event.widget.focus_set() # give keyboard focus to the label 
    event.widget.bind('<Key>', edit) 

def edit(event): 
    print(event.char) 

example = Label(frame, text='Click me') 
example.pack() 
example.bind('<Button-1>', prep) 
mainloop() 
+0

これは知っておくと便利な方法です。私は何らかの理由でそれをネット上で見つけるのに苦労しました。ありがとうございました – EriktheRed

関連する問題