N.B。这不是所有代码。我真正想做的是绑定玩家1键(wasd)和玩家2键(向上,向下,向右,向左),这样我就可以同时按下它们,因此可以分别控制两个玩家但同时控制玩家(玩家2不在代码)) 所以这是我目前的代码:
def p1_move_N(self):
global p1_y
canvas.create_line(p1_x, p1_y, p1_x, (p1_y-line_length), width=line_width, fill=p1_colour)
p1_y = p1_y - line_length
def p1_move_S(self):
global p1_y
canvas.create_line(p1_x, p1_y, p1_x, p1_y+line_length, width=line_width, fill=p1_colour)
p1_y = p1_y + line_length
def p1_move_E(self):
global p1_x
canvas.create_line(p1_x, p1_y, p1_x + line_length, p1_y, width=line_width, fill=p1_colour)
p1_x = p1_x + line_length
def p1_move_W(self):
global p1_x
canvas.create_line(p1_x, p1_y, p1_x - line_length, p1_y, width=line_width, fill=p1_colour)
p1_x = p1_x - line_length
p1_press = None # which key is the player holding down?
def change_press(key, up_down):
if up_down == "up":
p1_press=None
else:
p1_press=key.keysym
while(True):
print(p1_press)
window.bind("<KeyPress-w>", change_press('down'))
window.bind("<KeyPress-s>", change_press('down'))
window.bind("<KeyPress-a>", change_press('down'))
window.bind("<KeyPress-d>", change_press('down'))
window.bind("<KeyRelease-w>", change_press('up'))
window.bind("<KeyRelease-s>", change_press('up'))
window.bind("<KeyRelease-a>", change_press('up'))
window.bind("<KeyRelease-d>", change_press('up'))
我已经开始这样做,但我似乎无法调试我的所有代码抛回的事实:(当按下'w'键时)
None
Nonew
wNone
None
Nonew
这是来自循环
它应该返回:
None
w
None
None
w
None
非常感谢任何帮助!!
答案 0 :(得分:1)
执行此操作时:window.bind("<KeyPress-w>", change_press('down'))
,tkinter将调用函数change_press('down')
,而返回的任何内容都与绑定相关联。换句话说,您在初始化时调用该函数,而不是每次按下该键时调用该函数。
一个简单的修改是将绑定更改为:
window.bind("<KeyPress-w>", lambda event: change_press('down'))
lambda将创建一个新的匿名函数,该函数将事件作为参数(由Tkinter在调用绑定函数时提供)。这个新功能将与绑定相关联。然后,当绑定触发时,它将调用change_press
函数。
此外,这个语句集将永远运行,阻止您的GUI出现:
while(True):
print(p1_press)
您需要删除该代码。