如何在Tkinter中清除坐标?如何重置event.y获取动态坐标?
问题分析与解决方案
首先得明确一个关键误解:你获取的event.y其实是触发按键事件时鼠标所在的屏幕坐标,不是你要移动的组件的坐标!所以只要鼠标没动,不管按多少次箭头键,event.y都会保持同一个值——这不是需要“重置”或者“清除”的问题,是你找错了坐标的来源。
再看你的代码还有个小问题:事件回调函数的参数顺序不对(假设你用的是Tkinter这类常见GUI库),类方法的回调应该是self在前、event在后,你写的up(event, self)会导致self无法正确指向组件实例,这可能也是你逻辑混乱的原因之一。
正确的实现思路
你需要给要移动的组件维护自身的坐标属性,每次按键时更新这个属性,再用这个属性来移动组件,而不是依赖event.y。举个具体的修正示例(假设你用Tkinter Canvas实现游戏):
class GameComponent: def __init__(self, canvas): self.canvas = canvas # 初始化组件的初始坐标 self.current_x = 100 self.current_y = 100 # 创建一个示例组件(蓝色矩形) self.item_id = canvas.create_rectangle( self.current_x, self.current_y, self.current_x + 50, self.current_y + 50, fill="blue" ) # 绑定向上箭头键的触发事件 canvas.bind("<Up>", self.up) def up(self, event): # 每次按上箭头,更新组件的y坐标(向上移动15单位) self.current_y -= 15 # 同步更新组件在Canvas上的显示位置 self.canvas.coords( self.item_id, self.current_x, self.current_y, self.current_x + 50, self.current_y + 50 ) # 打印组件当前的y坐标(这才是你需要追踪的值) print(f"组件当前y坐标: {self.current_y}")
为什么你的尝试没用?
del ycoord只是删除了局部变量,下次触发事件时会重新赋值event.y,但这个值还是鼠标的位置,和组件本身无关。del event.y完全没必要,每次按键事件都会生成一个全新的event对象,删除上一个对象的属性对下一次事件没有任何影响。
总结一下:放弃从event.y获取组件坐标,转而维护组件自己的坐标属性,每次按键更新这个属性并同步组件位置,就能解决你的问题啦。
内容的提问来源于stack exchange,提问作者user10192099
相关产品推荐
相关产品推荐

