【没钱买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)


<<:  【从零开始的Swift开发心路历程-Day24】天气预报App实作Part3

>>:  Day.27 「var 成为时代的眼泪!」 —— ES6 区块作用域 与 提升

Day 27 - [实战练习] Pricing Sections

在产品网站上,常常会见到付费价格的页面,其实 Tailwind 也是有像 Bootstrap 一样...

新新新手阅读 Angular 文件 - Day04

学习目标 这篇内容是纪录阅读官方文件Display a selection list,文章主要内容是...

[Day13]Parking

上一篇介绍了Die Game,是一题判断骰子数字的题目,由於题目是中文,并且把解题丝路都跟你讲了,所...

Day 13 文字人脸效果

文字人脸效果 教学原文参考:文字人脸效果 这篇文章会介绍使用 GIMP 的图层混合功能,搭配文字输入...

#06 No-code 之旅 — 用 Next.js 解决前後端?API Routes 简介

连假最後一天!分享了一些关於 Next.js 这个框架,虽然他是 React 的框架,可是你们知道吗...