1

それぞれのボタンが押されたときに実行する必要があるこのコードがありますが、何も起こりません。これはなぜでしょうか?

def keyReleased(self,event):
    if event.keysym == 'Right':
        self.move('Right')
    elif event.keysym == 'Left':
      direction=  self.move('Left')
    elif event.keysym == 'Up':
        self.move('Up')
    elif event.keysym =='Down':
        self.move('Down')
    elif event.keysym =='Escape':
        self._root.destroy()
4

2 に答える 2

1

bind_all はそれを行う 1 つの方法です。以下のコードでは、矢印キーは「特殊キー」カテゴリにあることに注意してください。

    try:
        import Tkinter as tk     ## Python 2.x
    except ImportError:   
        import tkinter as tk     ## Python 3.x

    def key_in(event):
        ##shows key or tk code for the key
        if event.keysym == 'Escape':
            root.quit()
        if event.char == event.keysym:
            # normal number and letter characters
            print'Normal Key', event.char
        elif len(event.char) == 1:
            # charcters like []/.,><#$ also Return and ctrl/key
            print( 'Punctuation Key %r (%r)' % (event.keysym, event.char) )
        else:
            # f1 to f12, shift keys, caps lock, Home, End, Delete ...
            print( 'Special Key %r' % event.keysym )

    root = tk.Tk()
    tk.Label(root, text="Press a key (Escape key to exit):" ).grid()

    ent=tk.Entry(root)
    ent.bind_all('<Key>', key_in)  # <==================
    ent.focus_set()

    root.mainloop()

ただし、矢印キーのみが必要な場合は、それぞれを関数にバインドできます

    def arrow_down(event):
        print "arrow down"

    def arrow_up(event):
        print "arrow up"

    root = tk.Tk()
    tk.Label(root, text="Press a key (Escape key to exit):" ).grid()

    root.bind('<Down>', arrow_down)
    root.bind('<Up>', arrow_up)

    root.mainloop()
于 2013-10-09T18:01:50.380 に答える