我做了一個工作一段代碼,用於支持在畫布上的對象的關鍵控制運動:Tkinter的循環鍵綁定不工作
self.can = tk.Canvas(master, width=100, height=100)
self.can.grid()
self.can.bind('<Right>', lambda event: self.move(0))
self.can.bind('<Down>', lambda event: self.move(90))
self.can.bind('<Left>', lambda event: self.move(180))
self.can.bind('<Up>', lambda event: self.move(270))
self.can.focus_set()
def move(self, dir):
if dir == 0:
print 'right'
elif dir == 90:
print 'down'
elif dir == 180:
print 'left'
elif dir == 270:
print 'up'
我沒有對象,所以我只是測試關鍵綁定。沒關係。但後來我試圖優化的東西,並把這些綁定在一個循環中
x = 0
for i in ['<Right>', '<Down>', '<Left>', '<Up>']:
self.can.bind(i, lambda event: self.move(x))
x += 90
...它停止工作。沒有錯誤,但沒有約束力。也許這都是關於.bind()
函數的event
參數 - 我認爲這是一個常見的string
,但在網絡中找不到這個或相反的證據。如果我確信視覺上類似的綁定數量會持續增長,並且我不希望在我的代碼中有任何複製粘貼,我該如何保持事情的好和短?
更新:發現綁定不應被視爲代碼的功能部分,因此不需要審美縮短。但我仍然很好奇,爲什麼沒有這個工作,以及什麼event
論點組成。
爲什麼把它們放在一個循環?結果不太清晰,容易出現常見錯誤(例如您正在遇到的錯誤),並使用相同數量的代碼行。通過循環做這件事,你什麼也得不到。 –