这一篇我们会拿现有的 day 17 成品来改,
我们这篇主要要学习的是滑鼠的监听事件完全掌握。
我们接下来的讨论,会基於读者已经先读过我 day5 文章 的架构下去进行程序设计
如果还不清楚我程序设计的逻辑 (UI.py、controller.py、start.py 分别在干麻)
建议先阅读 day5 文章後再来阅读此文。
https://www.wongwonggoods.com/python/pyqt5-5/
https://github.com/howarder3/ironman2021_PyQt5_photoshop/tree/main/day21_mouse_control
这篇文章的 UI 我们直接沿用 Day 17 的内容,
所以这部分没什麽好多说的,也不是我们这篇文的重点。
我们是监听 Qlabel (图片)里面的事件,所以我们查询的文件位於 QLabel 底下。
我们可以看到,一共可以监听的滑鼠事件有:
而这些动作都会触发一个 "QMouseEvent",我们再来去看看 QMouseEvent 有什麽
看起来 PyQt 有完整的能够帮我们纪录滑鼠各种事件细节的功能,这篇我们就来使用看看
我们修改 day17 的 img_controller.py,修改&新增以下内容:
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 内部提供的方法,
这边因为功能很多,我就只先试未来我很有可能会用到的。
特别着重在:我要知道「按下去位置」、「移动位置」、「松开位置」,
并知道「左键还是右键」。
我们依照文件修改一下刚刚的 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,代表着滑鼠移动的轨迹。
event.button() = 0:没有按键输入
event.button() = 1:滑鼠左键
event.button() = 2:滑鼠右键
到此,我们掌握了大部分我在滑鼠会使用的功能,
之後我们会透过这些函数加以运用。
★ 本文也同步发於我的个人网站(会有内容目录与显示各个小节,阅读起来更流畅):【PyQt5】Day 21 - 透过 PyQt 实现滑鼠监听总整理,完全掌握滑鼠控制 (listen mouse)
<<: 【从零开始的Swift开发心路历程-Day24】天气预报App实作Part3
>>: Day.27 「var 成为时代的眼泪!」 —— ES6 区块作用域 与 提升
在产品网站上,常常会见到付费价格的页面,其实 Tailwind 也是有像 Bootstrap 一样...
学习目标 这篇内容是纪录阅读官方文件Display a selection list,文章主要内容是...
上一篇介绍了Die Game,是一题判断骰子数字的题目,由於题目是中文,并且把解题丝路都跟你讲了,所...
文字人脸效果 教学原文参考:文字人脸效果 这篇文章会介绍使用 GIMP 的图层混合功能,搭配文字输入...
连假最後一天!分享了一些关於 Next.js 这个框架,虽然他是 React 的框架,可是你们知道吗...