Python 一次按两个键可沿对角线方向移动tkinter?
如何使用2个键在画布上移动某个对象?在别人告诉我我没有做研究之前,我做了。我仍然这样问是因为我不知道他们在说什么。人们在谈论我不知道的微型状态和命令Python 一次按两个键可沿对角线方向移动tkinter?,python,tkinter,Python,Tkinter,如何使用2个键在画布上移动某个对象?在别人告诉我我没有做研究之前,我做了。我仍然这样问是因为我不知道他们在说什么。人们在谈论我不知道的微型状态和命令 from tkinter import * def move(x,y): canvas.move(box,x,y) def moveKeys(event): key=event.keysym if key =='Up': move(0,-10) elif key =='Down': mov
from tkinter import *
def move(x,y):
canvas.move(box,x,y)
def moveKeys(event):
key=event.keysym
if key =='Up':
move(0,-10)
elif key =='Down':
move(0,10)
elif key=='Left':
move(-10,0)
elif key=='Right':
move(10,0)
window =Tk()
window.title('Test')
canvas=Canvas(window, height=500, width=500)
canvas.pack()
box=canvas.create_rectangle(50,50,60,60, fill='blue')
canvas.bind_all('<Key>',moveKeys)
从tkinter导入*
def移动(x,y):
画布移动(框,x,y)
def移动键(事件):
key=event.keysym
如果键==“向上”:
移动(0,-10)
elif键==“向下”:
移动(0,10)
elif键==‘左’:
移动(-10,0)
elif key==“右侧”:
移动(10,0)
window=Tk()
window.title('Test')
画布=画布(窗口,高度=500,宽度=500)
canvas.pack()
box=canvas.创建一个矩形(50,50,60,60,fill='blue')
canvas.bind_all(“”,moveKeys)
有什么办法可以让我同时得到两把钥匙来移动吗?我希望使用这种格式来完成,而不是使用迷你状态。如果您所说的“迷你状态”方法是指这个答案(),那么它实际上并不难理解
请参见以下代码的修改和注释版本,该版本遵循该理念:
from tkinter import tk
window = tk.Tk()
window.title('Test')
canvas = tk.Canvas(window, height=500, width=500)
canvas.pack()
box = canvas.create_rectangle(50, 50, 60, 60, fill='blue')
def move(x, y):
canvas.move(box, x, y)
# This dictionary stores the current pressed status of the (← ↑ → ↓) keys
# (pressed: True, released: False) and will be modified by Pressing or Releasing each key
pressedStatus = {"Up": False, "Down": False, "Left": False, "Right": False}
def pressed(event):
# When the key "event.keysym" is pressed, set its pressed status to True
pressedStatus[event.keysym] = True
def released(event):
# When the key "event.keysym" is released, set its pressed status to False
pressedStatus[event.keysym] = False
def set_bindings():
# Bind the (← ↑ → ↓) keys's Press and Release events
for char in ["Up", "Down", "Left", "Right"]:
window.bind("<KeyPress-%s>" % char, pressed)
window.bind("<KeyRelease-%s>" % char, released)
def animate():
# For each of the (← ↑ → ↓) keys currently being pressed (if pressedStatus[key] = True)
# move in the corresponding direction
if pressedStatus["Up"] == True: move(0, -10)
if pressedStatus["Down"] == True: move(0, 10)
if pressedStatus["Left"] == True: move(-10, 0)
if pressedStatus["Right"] == True: move(10, 0)
canvas.update()
# This method calls itself again and again after a delay (80 ms in this case)
window.after(80, animate)
# Bind the (← ↑ → ↓) keys's Press and Release events
set_bindings()
# Start the animation loop
animate()
# Launch the window
window.mainloop()
从tkinter导入tk
window=tk.tk()
window.title('Test')
canvas=tk.canvas(窗口,高度=500,宽度=500)
canvas.pack()
box=canvas.create_矩形(50,50,60,60,fill='blue')
def移动(x,y):
画布移动(框,x,y)
#此字典存储当前已按下按钮的状态(← ↑ → ↓) 钥匙
#(按下:True,释放:False)并将通过按下或释放每个键进行修改
pressedStatus={“向上”:错误,“向下”:错误,“左”:错误,“右”:错误}
def按下(事件):
#按下键“event.keysym”时,将其按下状态设置为True
按下状态[event.keysym]=真
def释放(事件):
#释放键“event.keysym”时,将其按下状态设置为False
按状态[event.keysym]=错误
def set_绑定():
#捆绑(← ↑ → ↓) 按键的按下和释放事件
对于[“上”、“下”、“左”、“右”]中的字符:
window.bind(“%char,按下)
绑定(“%char,已发布)
def animate():
#对于每个(← ↑ → ↓) 当前按下的键(如果按下状态[键]=真)
#向相应的方向移动
如果按状态[“向上”]==真:移动(0,-10)
如果按状态[“向下”]==真:移动(0,10)
如果按状态[“左”]==真:移动(-10,0)
如果按状态[“右”]==真:移动(10,0)
canvas.update()
#此方法在延迟后一次又一次地调用自身(本例中为80毫秒)
window.after(80,动画)
#捆绑(← ↑ → ↓) 按键的按下和释放事件
set_绑定()
#启动动画循环
制作动画()
#打开窗口
window.mainloop()
您无法使用指定的格式执行此操作。tkinter中的事件处理程序将始终对单次按键作出响应。如果约束是您不能使用“迷你状态”,那么你就做不到。你希望13岁的孩子的大脑能够处理这个问题吗?好吧,你可以先运行代码,看看它是否做了你想做的事情。然后用它一次换一行,直到你对结果满意为止:)