You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过事件绑定修改Tkinter中arc(pac_man)的X轴位置?

解决Pac-Man的X轴位置修改问题

要实现按右键移动Pac-Man,你需要修改xChange函数,同时更新Canvas上元素的位置——直接修改coord字典不会自动同步到已创建的arc上,得用Tkinter Canvas提供的方法来更新。

方法1:使用move()方法直接移动元素

这个方法更简单,不需要手动计算新坐标,直接指定X方向的偏移量:

#Imports
from tkinter import *

#Functions
def xChange(event):  # 必须接收event参数,bind绑定的函数会传入事件对象
    # 每次按右键,X方向移动10像素
    cvs.move(pac_man, 10, 0)
    # 如果需要同步更新coord字典(比如后续要用到)
    coord['x_pos'] += 10
    coord['x_size'] += 10

#Object Attributes
wn = Tk()
wn.geometry('512x320')
wn.title('Moving with Keys')

cvs = Canvas(wn, bg='limegreen', height=320, width=512)

coord = {'x_pos': 10, 'y_pos': 10, 'x_size': 50, 'y_size': 50}

pac_man = cvs.create_arc(
    coord['x_pos'],
    coord['y_pos'],
    coord['x_size'],
    coord['y_size'],
    start=45,
    extent=270,
    fill='yellow',
    outline='black',
    width=4,
)

cvs.bind('<Right>', xChange)
cvs.focus_set()  # 必须让Canvas获得焦点,才能接收键盘事件!

cvs.pack()
wn.mainloop()  # 启动Tkinter事件循环,维持窗口运行

方法2:使用coords()方法更新完整坐标

如果你需要精确控制坐标值,可以修改coord字典后,用coords()方法重新设置arc的四个坐标:

#Imports
from tkinter import *

#Functions
def xChange(event):
    # 修改X轴相关的坐标值
    coord['x_pos'] += 10
    coord['x_size'] += 10
    # 用新坐标更新arc
    cvs.coords(pac_man, coord['x_pos'], coord['y_pos'], coord['x_size'], coord['y_size'])

#Object Attributes
wn = Tk()
wn.geometry('512x320')
wn.title('Moving with Keys')

cvs = Canvas(wn, bg='limegreen', height=320, width=512)

coord = {'x_pos': 10, 'y_pos': 10, 'x_size': 50, 'y_size': 50}

pac_man = cvs.create_arc(
    coord['x_pos'],
    coord['y_pos'],
    coord['x_size'],
    coord['y_size'],
    start=45,
    extent=270,
    fill='yellow',
    outline='black',
    width=4,
)

cvs.bind('<Right>', xChange)
cvs.focus_set()

cvs.pack()
wn.mainloop()

关键注意点:

  • 绑定键盘事件的函数必须接收event参数,否则会触发参数不匹配的报错。
  • 必须给Canvas调用focus_set(),否则它无法捕获键盘输入事件。
  • 一定要加上wn.mainloop()启动Tkinter的事件循环,否则窗口会创建后立刻关闭。

内容的提问来源于stack exchange,提问作者henryCoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:40:38