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

如何通过PyQt从.cur文件获取光标热点信息并设置

解决PyQt中从.cur文件提取光标热点的问题

直接使用QCursor的文件路径构造函数即可自动读取.cur文件中的热点信息,无需手动解析。

你的原代码通过QPixmap加载.cur文件再创建QCursor,这种方式会丢失光标文件自带的热点元数据——因为QPixmap仅处理图像像素数据,不会解析.cur格式的额外信息(比如热点坐标),所以默认将热点设为图像中心。

修改后的代码如下:

from PyQt5.QtWidgets import QWidget
from PyQt5.QtGui import QCursor

@staticmethod
def setCursor(widget: QWidget, cursorIconPath: str):
    # 直接用文件路径构造QCursor,自动读取.cur文件的热点信息
    widget.setCursor(QCursor(cursorIconPath))

原理说明

QCursor的构造函数支持直接传入光标文件路径(包括.cur格式),内部会解析.cur文件的完整结构,其中就包含热点坐标信息,这样设置的光标会完全遵循原文件的定义。

特殊场景补充(可选)

如果因为某些原因需要手动解析.cur文件的热点,可以通过struct模块读取文件头:
.cur文件的头部结构包含热点的x、y坐标(位于文件偏移量0xA和0xC的位置,各占2字节)。示例代码如下:

import struct

def get_cursor_hotspot(cursor_path):
    with open(cursor_path, 'rb') as f:
        # 跳过前10字节的文件头标识
        f.seek(10)
        # 读取热点x坐标(2字节小端)
        hot_x = struct.unpack('<H', f.read(2))[0]
        # 读取热点y坐标(2字节小端)
        f.seek(12)
        hot_y = struct.unpack('<H', f.read(2))[0]
        return (hot_x, hot_y)

之后可以用QCursor(QPixmap(cursor_path), hot_x, hot_y)来构造光标,但这种方式不如直接用QCursor(cursor_path)简洁可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:52:37