如何用Python Tkinter将鼠标指针吸附到窗口中心?
Tkinter实现鼠标吸附窗口中心的问题(跨平台,Linux KDE Wayland)
我用Python的Tkinter库创建窗口,需要实现鼠标视角控制逻辑:计算鼠标的移动量后,将指针始终吸附到窗口中心。尝试了多种方案均未成功,要求仅依赖Tkinter实现,且支持跨平台(我当前使用Linux KDE Wayland环境)。
以下是我的尝试及对应结果:
1. 初始化时调用event_generate
class Window: def __init__(self): self.root = tk.Tk() self.root.event_generate("<Motion>", warp = True, x = 50, y = 50) self.root.mainloop()
结果:无任何作用,鼠标仍可自由移动。推测event_generate没有触发条件的话不会持续运行。
2. 绑定按键事件触发event_generate
class Window: def __init__(self): self.root = tk.Tk() self.root.bind("<KeyPress>", self.onKeyPress) self.root.mainloop() def onKeyPress(self, event): self.root.event_generate("<Motion>", warp = True, x = 50, y = 50)
结果:onKeyPress事件能正常触发,但鼠标位置没有变化。
3. 绑定鼠标移动事件触发event_generate
class Window: def __init__(self): self.root = tk.Tk() self.root.bind("<Motion>", self.onMouseMove) self.root.mainloop() def onMouseMove(self, event): self.root.event_generate("<Motion>", warp = True, x = 50, y = 50)
结果:触发无限循环错误RecursionError: maximum recursion depth exceeded。
补充尝试:Canvas使用icursor方法
self.canvas = tk.Canvas(self.root, width = 400, height = 200) self.canvas.icursor(50, 50) self.canvas.pack()
结果:即使调用focus或focus_set也无效,鼠标没有吸附到指定位置。
内容的提问来源于stack exchange,提问作者MirceaKitsune
相关产品推荐
相关产品推荐

