🌟想系统化学习 GUI 编程?看看这个:[Python GUI 编程] PySide & PyQt - 学习手册-优快云博客
0x01:使用系统自带的鼠标样式
QWidget 提供了 setCursor()
函数帮助我们设置鼠标的样式,setCursor()
支持使用系统自带的鼠标样式和自定义鼠标样式。下面这个示例展示了如何使用系统自带的鼠标样式:
import sys
from PyQt5.Qt import *
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
window = QWidget()
window.setWindowTitle("QWidget 鼠标形状设置")
window.resize(500, 500)
window.setCursor(Qt.ForbiddenCursor) # 设置鼠标形状
# 3. 展示控件
window.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())
0x02:自定义鼠标样式
0x0201:创建一个自定义鼠标样式
setCursor()
方法支持传入自定义的鼠标样式(鼠标图片)。首先,我们可以先从下面这个网站中找一个好看的鼠标样式:
鼠标指针 - 光标 - 电脑鼠标指针下载 - 致美化 - 漫锋网提供精美电脑鼠标指针光标预览及下载,鼠标指针是在计算机开始使用鼠标后为了在图形界面上标识出鼠标位置而产生的,我们提供的是鼠标指针光标皮肤,鼠标的指针是不对称的。鼠标右边箭头的小短线是水平的,从而可以保证给用户的视觉感受不会太斜 ,因此,虽然箭头视觉设计不是完全对称的,但是基本保证了视觉上的舒适性。https://zhutix.com/tag/cursors/
笔者选的是这个(直接下载图片就可以了哦),下载完成后保存为 cursor.png
即可:
下面的代码根据 cursor.png
创建了一个光标对象,并通过 setCursor()
方法进行了设置:
import sys
from PyQt5.Qt import *
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
window = QWidget()
window.setWindowTitle("QWidget 鼠标形状设置")
window.resize(500, 500)
window.setCursor(Qt.ForbiddenCursor) # 设置鼠标形状
pixmap = QPixmap("cursor.png") # 设置鼠标图片
cursor = QCursor(pixmap) # 创建光标对象
window.setCursor(cursor) # 设置鼠标形状
# 3. 展示控件
window.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())
0x0202:缩放鼠标样式大小
有时候我们从网上找的鼠标图片样式过小或者过大,此时就可以使用 QPixmap()
的 scaled()
方法来进行缩放处理,看下面这个示例:
import sys
from PyQt5.Qt import *
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
window = QWidget()
window.setWindowTitle("QWidget 鼠标形状设置")
window.resize(500, 500)
window.setCursor(Qt.ForbiddenCursor) # 设置鼠标形状
pixmap = QPixmap("cursor.png").scaled(100, 100) # 设置鼠标图片,并通过 scaled() 方法调整图片大小
cursor = QCursor(pixmap) # 创建光标对象
window.setCursor(cursor) # 设置鼠标形状
# 3. 展示控件
window.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())
0x0203:设置鼠标热点位置
“热点” 即 “判定点”,假设我们鼠标的图片很大,那么大一张图片的哪里碰到按钮才算是碰到呢?这就是热点要考虑的事情了。热点是通过 QCursor()
设置的,默认状态下是(-1
, -1
),代表图片正中心碰到按钮才算是碰到,看下面这个例子:
import sys
from PyQt5.Qt import *
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
window = QWidget()
window.setWindowTitle("QWidget 鼠标形状设置")
window.resize(500, 500)
window.setCursor(Qt.ForbiddenCursor) # 设置鼠标形状
pixmap = QPixmap("cursor.png").scaled(200, 200) # 设置鼠标图片,并通过 scaled() 方法调整图片大小
cursor = QCursor(pixmap) # 创建光标对象
window.setCursor(cursor) # 设置鼠标形状
# 3. 展示控件
window.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())
下面是修改了热点后的样子,笔者将热点修改为了图片左上角的(0,0),看看效果(这边建议是自己运行,对比上下示例的结果):
import sys
from PyQt5.Qt import *
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
window = QWidget()
window.setWindowTitle("QWidget 鼠标形状设置")
window.resize(500, 500)
window.setCursor(Qt.ForbiddenCursor) # 设置鼠标形状
pixmap = QPixmap("cursor.png").scaled(200, 200) # 设置鼠标图片,并通过 scaled() 方法调整图片大小
cursor = QCursor(pixmap, 0, 0) # 创建光标对象, 设置热点为(0,0)
window.setCursor(cursor) # 设置鼠标形状
# 3. 展示控件
window.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())
0x03:重置鼠标样式
QWidget 提供了 unsetCursor()
方法来让鼠标样式恢复默认状态。看下面这个示例代码,我们设置了鼠标为自定义样式后又调用了 unsetCursor()
方法,让鼠标恢复默认状态:
import sys
from PyQt5.Qt import *
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
window = QWidget()
window.setWindowTitle("QWidget 鼠标形状设置")
window.resize(500, 500)
window.setCursor(Qt.ForbiddenCursor) # 设置鼠标形状
pixmap = QPixmap("cursor.png").scaled(200, 200) # 设置鼠标图片,并通过 scaled() 方法调整图片大小
cursor = QCursor(pixmap, 0, 0) # 创建光标对象, 设置热点为(0,0)
window.setCursor(cursor) # 设置鼠标形状
window.unsetCursor() # 取消鼠标形状
# 3. 展示控件
window.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())