我制作了一段代码,用于支持画布上对象的按键控制移动:
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
,但在网上没有发现这方面或相反的证据。如果我很确定视觉上相似的绑定数量会不断增加,并且我不希望代码中有任何拷贝粘贴,那么我如何保持内容的简洁?你知道吗
upd:发现绑定不应该被视为代码的功能部分,因此不需要美学上的缩短。但是我仍然很好奇为什么这不起作用,以及event
参数是由什么组成的。你知道吗
这是因为对于所有绑定,x将等于360。Lambda将在执行时获取当前的x值。发生时x=360。你知道吗
此快速解决方案应能解决以下问题:
相关问题 更多 >
编程相关推荐