2016-03-23 6 views
1

何とか私のバインディングが2つしか動作しません(左右のマウスボタン)。以前のプログラムでかなりのバインディングを行ったことがありますが、なぜこれが機能しないのか分かりません。誰かが私を助けることができますか?キャンバスは、キーの押下をキャッチしないようにPython 3のバインディングが機能しない

class Window: 
    def __init__(self): 
     self.win=Tk() 
     self.can=Canvas(self.win, height=800, width=800, bg="grey90") 
     self.can.grid(row=0, column=0) 

class Player: 
    def __init__(self, bind1, bind2): 
     win.can.bind(bind1, self.moveleft) 
     win.can.bind(bind2, self.moveright) 
    def moveleft(event, self): 
     print("left") 
    def moveright(event, self): 
     print("right") 

class Manage: 
    def __init__(self, numofplayers): 
     self.numofplayers=numofplayers 
     self.players=[] 
     self.bindings1=["<Left>", "<Button-1>", "<a>", "<m>"] 
     self.bindings2=["<Right>", "<Button-3>", "<s>", "<n>"] 
     self.start() 
    def start(self): 
     for i in range(self.numofplayers): 
      self.players.append(Player(self.bindings1[i], self.bindings2[i])) 
+2

[Tkinter - 矢印キーイベントをバインドできません]の可能な複製(http://stackoverflow.com/questions/19895877/tkinter-cant-bind-arrow-key-events) – radl

答えて

2

フォーカスがTk()ウィンドウの上にあります。キャンバスがキープレスをキャッチするには、キャンバスにfocus_set()が必要です。

class Window(object): 
    def __init__(self): 
     self.wind=Tk() 
     self.can=Canvas(self.wind, height=800, width=800, bg="grey90") 
     self.can.grid(row=0, column=0) 
     self.can.focus_set() 

デモを行うにはちょうどいいです。コードに応じて適切な場所を選択する必要があります。

関連する問題