当前位置: 首页 > 开发杂谈 >

【没钱买ps,PyQt自己写】Day 21 - 透过 PyQt 实现滑鼠监听总整理,完全掌握滑鼠控制 (listen mouse)

看完这篇文章你会得到的成果图

前言

这一篇我们会拿现有的 day 17 成品来改,
我们这篇主要要学习的是滑鼠的监听事件完全掌握。

之前内容的重点复习 (前情提要)

我们接下来的讨论,会基於读者已经先读过我 day5 文章 的架构下去进行程序设计
如果还不清楚我程序设计的逻辑 (UI.py、controller.py、start.py 分别在干麻)
建议先阅读 day5 文章後再来阅读此文。

https://www.wongwonggoods.com/python/pyqt5-5/

此篇文章的范例程序码 github

https://github.com/howarder3/ironman2021_PyQt5_photoshop/tree/main/day21_mouse_control

UI 部分

这篇文章的 UI 我们直接沿用 Day 17 的内容,
所以这部分没什麽好多说的,也不是我们这篇文的重点。

PyQt 滑鼠的完全控制总整理

我们先来看看官方文件

关於滑鼠可以用的函数们

我们是监听 Qlabel (图片)里面的事件,所以我们查询的文件位於 QLabel 底下。

我们可以看到,一共可以监听的滑鼠事件有:

  • mousePressEvent:按下滑鼠时的反应
  • mouseReleaseEvent:松开滑鼠时的反应
  • mouseMoveEvent:移动滑鼠时的反应

而这些动作都会触发一个 "QMouseEvent",我们再来去看看 QMouseEvent 有什麽

QMouseEvent 能使用的函数

看起来 PyQt 有完整的能够帮我们纪录滑鼠各种事件细节的功能,这篇我们就来使用看看

测试上述功能

我们修改 day17 的 img_controller.py,修改&新增以下内容:

  • 为了方便比较,我们先暂持移除 set_clicked_position 的功能。
self.ui.label_img.mousePressEvent = self.show_mouse_press # set_clicked_position
self.ui.label_img.mouseReleaseEvent = self.show_mouse_release
self.ui.label_img.mouseMoveEvent = self.show_mouse_move

并新增下面对应的功能 function

def show_mouse_press(self, event):
    print("[show_mouse_press]", event)

def show_mouse_release(self, event):
    print("[show_mouse_release]",event)

def show_mouse_move(self, event):
    print("[show_mouse_move]",event)

结果

我们可以发现,不论是按下去、(按下状态时)移动、放开滑鼠,
我们的事件都有以 QMouseEvent 的形式被记录下来。

使用 QMouseEvent 的提供的方法

再来我们观察 QMouseEvent 内部提供的方法,
这边因为功能很多,我就只先试未来我很有可能会用到的。

特别着重在:我要知道「按下去位置」、「移动位置」、「松开位置」,
并知道「左键还是右键」。

找出滑鼠移动的各种位置

我们依照文件修改一下刚刚的 function

def show_mouse_press(self, event):
    print(f"[show_mouse_press] {event.x()=}, {event.y()=}, {event.button()=}")


def show_mouse_release(self, event):
    print(f"[show_mouse_release] {event.x()=}, {event.y()=}, {event.button()=}")

def show_mouse_move(self, event):
    print(f"[show_mouse_move] {event.x()=}, {event.y()=}, {event.button()=}")

结果

这是一段我测试时的操作

我们可以整理出一个结果,

滑鼠的 x, y

关於滑鼠移动的 x, y,我们可以透过上述的方式直接取得,
中间 x, y,代表着滑鼠移动的轨迹。

滑鼠的按键 button()

event.button() = 0:没有按键输入
event.button() = 1:滑鼠左键
event.button() = 2:滑鼠右键

到此,我们掌握了大部分我在滑鼠会使用的功能,
之後我们会透过这些函数加以运用。

Reference


★ 本文也同步发於我的个人网站(会有内容目录与显示各个小节,阅读起来更流畅):【PyQt5】Day 21 - 透过 PyQt 实现滑鼠监听总整理,完全掌握滑鼠控制 (listen mouse)


相关文章:

  • Day–22 快速认识Excel SUM家族
  • 俄罗斯平台JOOM优化后的注册流程
  • [DAY5]制作容器(四)
  • 什么是wish平台知识产权?
  • 外贸人为什么要建立独立站
  • Day 4 - [Zenbo开发系列] 01-後盖打开方式、侦错USB孔位置
  • 跨境电商的新品曝光率为什么低呢?
  • day 30 - 结语
  • 掘金东南亚蓝海市场 这8大潜力电商平台不容错过!
  • 电商卖家开店必知的跨境电商和淘宝的区别
  • [Day 12]我也好想成为时间管理大师(後端篇)
  • 跨境电商想知道的深圳波兰海外仓有哪些?
  • 不只懂 Vue 语法:为何 v-for 的 key 必须是唯一值?v-for 与 v-if 能否同时使用?
  • Whistle proxy
  • 新蛋平台上的促销选品审核标准
  • TikTok与LiveRamp合作,助力品牌安全可靠地触达受众
  • Yandex Money虚拟卡申请:俄罗斯银行卡预付卡申请教程
  • 国外虚拟主机大全:便宜好用靠谱的国外网站空间推荐大全
  • 阿里云需要实名认证吗?阿里云个人可以做企业认证吗
  • 海外营销周报:谷歌广告将推出动态排除列表,报告显示2020年美国数字广告营收增长12%
  • MySQL mysqldump怎么用?MySQL怎么用mysqldump导入导出数据
  • 国外靠谱的VPS云服务器大全
  • Windows服务器推荐:便宜好用稳定靠谱的国外Windows服务器推荐
  • 寻找印度市场伙伴
  • 如何使用Hostinger的邮箱服务,Hostinger免费企业邮箱设置教程
  • 印度独立站怎么做?如何做印度市场独立站商城
  • 洛杉矶CN2服务器推荐:PCCW线路VPS,服务器服务商layerhost
  • Android让系统信任用户证书的方法
  • 一键脚本:Aria2+Aria2Ng+OneIndex | 自动上传OneDrive
  • WordPress主题开发基础:Body 类指南