【PyQt学习篇 · ⑤】:QWidget - 鼠标操作

这篇具有很好参考价值的文章主要介绍了【PyQt学习篇 · ⑤】:QWidget - 鼠标操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

鼠标形状设置

常用鼠标形状设置

在PyQt中,QWidget类提供了设置鼠标形状的功能。可以使用setCursor()方法来更改QWidget及其子类的鼠标形状。该方法接受一个Qt.CursorShape参数,该参数定义了不同的鼠标形状选项。

以下是一些常用的鼠标形状选项及其对应的Qt.CursorShape常量:

  • Qt.ArrowCursor:标准箭头指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.UpArrowCursor:向上箭头指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.CrossCursor:十字形指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.IBeamCursor:I形指针(用于文本输入)。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.WaitCursor:无操作期间的等待指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.BusyCursor:忙碌指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.ForbiddenCursor:禁止指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.PointingHandCursor:手形指针,用于指示可点击的对象。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.WhatsThisCursor:上下问号指针,用于提供上下文帮助。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.SizeVerCursor:垂直调整大小指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.SizeHorCursor:水平调整大小指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.SizeBDiagCursor:对角线调整大小指针(从左上到右下)。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.SizeAllCursor:移动调整大小指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.SplitVCursor:垂直分割指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.SplitHCursor:水平分割指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.OpenHandCursor:打开手指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.ClosedHandCursor:闭合手指针。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

  • Qt.BlankCursor:隐藏鼠标指针(下面是一个空白的图片)。
    【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

下面为常用鼠标设置的代码示例:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys

app = QApplication(sys.argv)

window = QWidget()
window.resize(200, 200)

window.setCursor(Qt.BusyCursor)     # 设置鼠标形状为加载状态
window.show()

sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

自定义鼠标形状

在PyQt中,可以使用QCursor对象来将一张图片设置为鼠标指针的形状。下面是具体步骤:

  1. 导入所需的类:from PyQt5.QtGui import QPixmap, QCursor
  2. 加载图片:使用QPixmap类的fromImage()方法从文件或QImage对象中加载图片。例如,cursor_image = QPixmap('path/to/image.png') 将会创建一个QPixmap对象,其中包含了指定路径下的图片。
  3. 调整图片大小:如果需要,可以使用cursor_image.scaled()方法调整图片的大小。例如,scaled_image = cursor_image.scaled(32, 32) 会将图片调整为32x32像素大小的图片。
  4. 创建自定义鼠标形状:使用QCursor类的QCursor(cursor_image)构造函数,传入调整大小后的图片,创建一个自定义的QCursor对象。
  5. 设置QWidget的鼠标形状:使用QWidget的setCursor()方法将自定义的QCursor对象设置为QWidget的鼠标形状。

以下是一个示例代码,展示了如何将一张图片设置为QWidget的鼠标形状:
【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPixmap, QCursor
import sys

app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle("自定义鼠标操作")
window.resize(300, 300)

pixmap = QPixmap('mouse.png')   # 创建一个图片对象
new_pixmap = pixmap.scaled(50, 50)  # 将缩放图片的对象返回,并用new_pixmap接收其返回值
cursor = QCursor(new_pixmap)    # 鼠标对象(图片对象)

window.setCursor(cursor)

window.show()
sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设
此时将鼠标移动到控件窗口内就会出现自定义的图片。

但是,当我们要进行点击的操作时,发现当鼠标的中间位置到达目标位置时才能执行点击操作,这是因为在QCursor函数内部,它将鼠标图片的热点设置在中间位置。

【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设
因此可以通过修改图片的热点位置,就可实现鼠标点击生效的位置。如以下代码,QCursor(new_pixmap, 0, 0),其中的0,0即为热点位置,若想将热点位置改为鼠标右下角,可设置为50,50。因为前边使用pixmap.scaled(50, 50)已将图片缩放到50,50的尺寸大小

pixmap = QPixmap('mouse.png')   # 创建一个图片对象
new_pixmap = pixmap.scaled(50, 50)  # 将缩放图片的对象返回,并用new_pixmap接收其返回值
cursor = QCursor(new_pixmap, 0, 0)    # 鼠标对象(图片对象)

重置形状

在PyQt中,unsetCursor()是一个QWidget的方法,用于将QWidget的鼠标指针形状重置为默认形状。

以以上代码为例:

pixmap = QPixmap('mouse.png')   # 创建一个图片对象
new_pixmap = pixmap.scaled(50, 50)  # 将缩放图片的对象返回,并用new_pixmap接收其返回值
cursor = QCursor(new_pixmap, 0, 0)    # 鼠标对象(图片对象)

window.setCursor(cursor)
window.unsetCursor()    # 重置鼠标形状

运行结果:

【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

获取鼠标

在PyQt中,你可以使用QWidgetpos()方法来获取鼠标的当前位置,使用QWidgetsetPos()方法来设置鼠标的位置。

下面分别来介绍这两个方法:

  1. 获取鼠标位置:pos()

    • pos()方法返回一个QPoint对象,表示当前鼠标的位置。(鼠标相对于屏幕的位置)QPoint对象有两个属性:x()表示横坐标,y()表示纵坐标。你可以使用这两个属性来获取具体的坐标值。
  2. 设置鼠标位置:setPos()

    • setPos(x, y)方法允许你将鼠标的位置设置为指定的横纵坐标。你可以通过给定的xy参数来指定新的坐标。
    • xy参数可以是一个整数或浮点数类型的值,表示相应的坐标位置。

在以上代码的基础上加上以下代码:

current_cursor = window.cursor()
print(current_cursor.pos())   # 打印当前鼠标的位置
current_cursor.setPos(0, 0)     # 移动鼠标到屏幕左上角
print(current_cursor.pos())   # 打印当前鼠标的位置

运行结果:

【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

鼠标跟踪

在PyQt中,可以使用setMouseTracking()hasMouseTracking()这两个API函数来设置和查询鼠标跟踪功能。

  1. setMouseTracking()函数

    • setMouseTracking(enable)允许你开启或关闭鼠标跟踪功能。
    • enable参数是一个布尔值,如果为True,则开启鼠标跟踪功能;如果为False,则关闭鼠标跟踪功能。
    • 不跟踪:鼠标移动时,必须处于按下状态,才会触发mouseMoveEvent事件
    • 跟踪:鼠标移动时,不处于按下状态,也会触发mouseMoveEvent事件。
  2. hasMouseTracking()函数

    • hasMouseTracking()函数会返回一个布尔值,表示当前QWidget是否开启了鼠标跟踪功能。

以下是一个使用鼠标跟踪功能的示例代码:

from PyQt5.QtWidgets import *
import sys

class MyWindow(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

    def mouseMoveEvent(self, me):
        print("鼠标移动了")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    
    window = MyWindow()
    window.resize(300, 300)
    window.show()

    sys.exit(app.exec_())

运行结果:
当鼠标放在控件内,未按下鼠标左键时,鼠标未进行跟踪,当长按鼠标左键并移动时,才会触发鼠标跟踪事件。

【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设
若在主程序中就设置鼠标跟踪,观察其结果:

window.setMouseTracking(True)	# 设置鼠标跟踪
print(window.hasMouseTracking())	# 打印鼠标跟踪状态

运行结果:
当鼠标移动到控件内,未按下鼠标左键,只移动,会直接触发鼠标跟踪事件,这是因为在程序中设置了鼠标跟踪。

【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设
在以上代码的基础上使用globalPos()方法打印鼠标的全局位置(相对于屏幕),使用localPos()方法打印局部位置(相对于控件)

def mouseMoveEvent(self, me):
    print('全局位置:', me.globalPos())
    print('局部位置:', me.localPos())

运行结果:

【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设

鼠标跟踪案例

案例:创建一个窗口,内部有一个label控件。

要求:

  • 鼠标移入窗口时,让label位置跟随鼠标位置。
  • 让鼠标设置为指定图片

以上案例的代码:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPixmap, QCursor
import sys


class MyWindow(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        # 设置窗口标题和大小
        self.setWindowTitle('鼠标跟踪案例')
        self.resize(500, 500)

        # 设置鼠标
        pixmap = QPixmap('mouse.png').scaled(50, 50)
        cursor = QCursor(pixmap, 0, 0)  # 设置热点为鼠标左上角
        self.setCursor(cursor)
        self.setMouseTracking(True)     # 开启鼠标跟踪

        # 设置标签
        label = QLabel(self)
        label.setText('我爱Python,我学PyQt')
        label.setStyleSheet('background-color: cyan;')

    def mouseMoveEvent(self, me):
        # 让标签跟踪鼠标
        label = self.findChild(QLabel)
        label.move(me.localPos().x(), me.localPos().y())

if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = MyWindow()
    window.show()

    sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑤】:QWidget - 鼠标操作,PyQt5从入门到精通,pyqt,计算机外设文章来源地址https://www.toymoban.com/news/detail-717536.html

到了这里,关于【PyQt学习篇 · ⑤】:QWidget - 鼠标操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【PyQt学习篇 · ⑥】:QWidget - 事件

    showEvent(QShowEvent) 方法: showEvent() 方法在窗口即将显示时被调用。 它的参数 QShowEvent 可以提供一些有关显示事件的信息。 可以通过重写 showEvent() 方法来执行一些在窗口显示前需要初始化的操作。 closeEvent(QCloseEvent) 方法: closeEvent() 方法在窗口即将关闭时被调用。 它的参数

    2024年02月06日
    浏览(44)
  • 【PyQt学习篇 · ⑨】:QWidget -控件交互

    setEnabled(bool) :该函数用于设置QWidget控件的可用性,参数bool为True表示该控件为可用状态,False表示该控件为不可用状态。当控件处于不可用状态时,该控件将无法响应用户的交互事件。 isEnabled() :该函数用于获取QWidget控件的当前可用状态,返回值为一个bool类型,True表示该

    2024年02月05日
    浏览(43)
  • PyQt5入门(一)——PyQt5与QtDesigner的安装

    首先,需要确保你已经安装了Python和PIP,因为使用PIP来安装PyQt5是最简便的方法。以下是在Windows和Ubuntu环境下配置并安装PyQt5以及QtDesigner的步骤: 打开命令提示符(CMD)。 运行以下命令安装PyQt5:pip install pyqt5 安装完成后,在命令提示符中运行“python”命令,然后输入“im

    2024年02月02日
    浏览(52)
  • PyQt5 鼠标和键盘事件的使用方法和示例

    了解如何在 PyQt5 中处理鼠标和键盘事件,以及如何使用这些事件来改变窗口的状态。

    2024年02月13日
    浏览(46)
  • 【PyQt学习篇 · ⑦】:QWidget - 父子关系扩充和层级控制

    childAt(x, y) 函数可以根据传入的坐标参数获取该QWidget中位于该坐标位置的子QWidget,如果该位置没有子QWidget则返回None。 parentWidget() 函数可以获取当前QWidget的父QWidget,如果没有父QWidget则返回None。通过这个函数可以遍历组成QWidget树的所有QWidget。 childrenRect() 函数可以获取该Q

    2024年02月07日
    浏览(45)
  • PyQt5入门1——PyQt5的安装与Hello World应用

    搞搞可视化界面哈,虽然不一定有用,但是搞一下。 PyQt实现了一个Python模块集。它有超过300类,将近6000个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。 PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版

    2024年02月12日
    浏览(58)
  • [Python GUI PyQt] PyQt5快速入门

    本文为博主个人对自己学习 PyQt5 GUI技术的纲要式的总结,主要的目的是以比较宏观的视角再次对 PyQt5 这一项技术作一次总结,通过该文可以快速让读者建立起 PyQt5 最基本的知识体系,了解 PyQt5 的 基本界面的设计 、 信号与槽 和 多线程 等知识,并简单学会使用 Qt Designer 工

    2024年04月15日
    浏览(53)
  • PyQt5入门教程

    假定已有环境如下: Windows Python VSCode (我们接下来会准备pyqt5和其desinger,没必要手搓qt5界面代码,手搓它,还不如用Tkinter) 1.安装PyQt5 下面使用pip来安装PyQt5, (pip3也行) 豆瓣镜像安装 2. 因为Qt Designer在Python3.5版本从PyQt5转移到了tools,故还需要安装pyqt5-tools 到这一步,

    2024年02月08日
    浏览(54)
  • PyQt5 快速入门(一)

    第一节按钮控件,文本控件,输入框,app图标 文章目录 一.GUI按钮控件 二.文本控件  三.输入框   四.让窗口显示在屏幕中央  五.让窗口显示在屏幕中央 总结   快速入门第一节

    2024年01月23日
    浏览(46)
  • 【Python】PyQt5入门

      最近接了一个小项目,主要任务是完成一个界面的设计,而且是基于Python,我第一反应就是使用大名鼎鼎的Qt来设计。Qt最早是用C语言开发的,但是后来也有了基于Python的第三方包,目前最新版是PyQt6.3,但是这个项目中使用的还是普及度更高的PyQt5。正好我也比较喜欢P

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包