PySide6 GUI 学习笔记——常用类及控件使用方法(光标类图标QCursor)
文章目录
- 常用方法表格
- QCursor类标准光标形状
- Python 应用示例
- 关键特性说明
- 注意事项
作用
QCursor
类用于管理鼠标光标形状与位置。支持预定义光标、自定义位图/掩码光标,并提供全局光标位置控制。
常用方法表格
方法/构造函数 | 参数说明 | 返回类型 | 功能描述 |
---|---|---|---|
QCursor() | - | - | 创建默认箭头光标 |
QCursor(Qt.CursorShape) | 预定义形状(如 Qt.ArrowCursor) | - | 创建指定形状光标 |
QCursor(QPixmap, hotX=-1, hotY=-1) | 位图、热点坐标(默认居中) | - | 创建自定义位图光标 |
pos() | - | QPoint | 获取主屏幕光标全局位置(静态方法) |
setPos(QPoint) | 目标位置坐标 | - | 移动主屏幕光标(静态方法) |
setShape(Qt.CursorShape) | 预定义形状 | - | 修改当前光标形状 |
shape() | - | CursorShape | 获取当前光标形状标识符 |
hotSpot() | - | QPoint | 获取自定义光标的热点坐标 |
bitmap() | - | QBitmap | 获取光标位图(标准光标返回空) |
QCursor类标准光标形状
形状名称 | Qt::CursorShape 值 | 系统光标名称 |
---|---|---|
cursor-arrow | Qt::ArrowCursor | left_ptr |
cursor-uparrow | Qt::UpArrowCursor | up_arrow |
cursor-cross | Qt::CrossCursor | cross |
cursor-ibeam | Qt::IBeamCursor | ibeam |
cursor-wait | Qt::WaitCursor | wait |
cursor-busy | Qt::BusyCursor | left_ptr_watch |
cursor-forbidden | Qt::ForbiddenCursor | forbidden |
cursor-hand | Qt::PointingHandCursor | pointing_hand |
cursor-openhand | Qt::OpenHandCursor | openhand |
cursor-closedhand | Qt::ClosedHandCursor | closedhand |
cursor-whatsthis | Qt::WhatsThisCursor | whats_this |
cursor-sizev | Qt::SizeVerCursor | size_ver |
cursor-sizeh | Qt::SizeHorCursor | size_hor |
cursor-sizeb | Qt::SizeBDiagCursor | size_bdiag |
cursor-sizef | Qt::SizeFDiagCursor | size_fdiag |
cursor-sizeall | Qt::SizeAllCursor | size_all |
cursor-vsplit | Qt::SplitVCursor | split_v |
cursor-hsplit | Qt::SplitHCursor | split_h |
Qt::DragMoveCursor | Qt::DragMoveCursor | dnd-move 或 move |
Qt::DragCopyCursor | Qt::DragCopyCursor | dnd-copy 或 copy |
Qt::DragLinkCursor | Qt::DragLinkCursor | dnd-link 或 link |
Python 应用示例
from PySide6.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout
from PySide6.QtGui import QCursor, QPixmap, Qt
from PySide6.QtCore import QPoint
import sysclass CursorDemo(QWidget):def __init__(self):super().__init__()# 示例1:设置预定义光标self.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))# 示例2:创建自定义位图光标pixmap = QPixmap(32, 32)pixmap.fill(Qt.GlobalColor.blue) # 简单蓝色方块custom_cursor = QCursor(pixmap, hotX=16, hotY=16)label = QLabel("悬停此处显示自定义光标")label.setCursor(custom_cursor)# 示例3:获取/设置全局光标位置print("当前光标位置:", QCursor.pos())QCursor.setPos(QPoint(100, 100))# 布局layout = QVBoxLayout()layout.addWidget(label)self.setLayout(layout)if __name__ == "__main__":app = QApplication(sys.argv)window = CursorDemo()window.show()app.exec()
关键特性说明
-
预定义光标
- 通过 Qt.CursorShape 枚举使用系统内置光标,如箭头、手型、十字等。
-
自定义光标
- 使用 QPixmap 创建带透明通道的位图光标。
- 热点坐标指定点击生效点(默认位图中心)。
-
多屏幕支持
- 通过重载方法可指定具体屏幕设置光标位置(如
setPos(QScreen, QPoint)
)。
- 通过重载方法可指定具体屏幕设置光标位置(如
-
光标状态获取
shape()
返回当前光标类型,hotSpot()
对自定义光标返回有效热点。
注意事项
-
推荐使用 32x32 尺寸保证跨平台兼容性
-
X11 系统可能部分形状回退到标准光标
-
全局光标操作需谨慎,避免与应用事件冲突