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

如何在Python FMX GUI应用的Form上获取鼠标光标位置?

解决DelphiFMX for Python中Form MouseMove事件无法触发及Caption不更新的问题

我使用DelphiFMX GUI Library for Python构建了一个简单的Form,并为其绑定了MouseMove事件。我希望在鼠标移动时获取Form上的X、Y坐标,并将坐标显示在Form的Caption中。

我尝试了以下代码,但无法正常工作:

from delphifmx import *

class frmMain(Form):
    def __init__(self, owner):
        self.Width = 800
        self.Height = 500
        self.Caption = "Mouse Position: <X, Y>"

        self.MouseMove = self.FormMouseMoveEvent

    def FormMouseMoveEvent(self, sender, e):
        self.Caption = "Mouse Position: <" + e.X + ", " + e.Y + ">"


def main():
    Application.Initialize()
    Application.Title = "My Application"
    Application.MainForm = frmMain(Application)
    Application.MainForm.Show()
    Application.Run()
    Application.MainForm.Destroy()

main()

Form的Caption始终没有变化,一直显示“Mouse Position: <X, Y>”


更新:

我怀疑MouseMove事件未正常触发,于是将代码修改为如下,但Caption仍然没有更新:

def FormMouseMoveEvent(self, sender, e):
    self.Caption = "Just changing the caption"

Python空白GUI应用


解决方案

在DelphiFMX的Python绑定中,不能直接通过赋值的方式绑定事件,需要使用Bind方法来正确注册事件处理器。另外,e.X和e.Y是整数类型,直接与字符串拼接会报错,需要先转换为字符串。

修正后的完整代码如下:

from delphifmx import *

class frmMain(Form):
    def __init__(self, owner):
        self.Width = 800
        self.Height = 500
        self.Caption = "Mouse Position: <X, Y>"

        # 使用Bind方法绑定MouseMove事件
        self.MouseMove.Bind(self.FormMouseMoveEvent)

    def FormMouseMoveEvent(self, sender, e):
        # 将整数坐标转为字符串后拼接
        self.Caption = f"Mouse Position: <{str(e.X)}, {str(e.Y)}>"


def main():
    Application.Initialize()
    Application.Title = "My Application"
    Application.MainForm = frmMain(Application)
    Application.MainForm.Show()
    Application.Run()
    Application.MainForm.Destroy()

main()

关键修改说明:

  • 事件绑定:将self.MouseMove = self.FormMouseMoveEvent替换为self.MouseMove.Bind(self.FormMouseMoveEvent),这是DelphiFMX Python绑定中注册事件的标准方式,确保事件触发时能正确调用处理函数。
  • 类型转换:使用str()将e.X和e.Y的整数类型转为字符串,避免字符串与整数拼接时的类型错误。

运行修正后的代码,鼠标在Form上移动时,Caption会实时更新显示当前的坐标位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:03:35