pyqt的学习(三)----鼠标点击和按键处理

news2025/1/16 14:02:29
QmyChartView 类的说明
QChart 和 QChartView 是基于 Graphics View 结构的绘图类。要对一个 QChart 图表进行鼠
标和按键操作,需要在 QChartView 类里对鼠标和按键事件进行处理,这就需要自定义一个
从 QChartView 继承的类。
QmyChartView 类是从 QChartView 类继承的用作图表的视图组件,实现了鼠标、按键事件
的处理,能够在鼠标移动时发射信号 mouseMove(),鼠标框选中一个矩形区域时放大显示此
区域,通过按键进行图表缩放和移动操作。
class QmyChartView(QChartView):
    mouseMove=pyqtSignal(QPoint)##鼠标移动
    
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setDragMode(QGraphicsView.DragMode.RubberBandDrag)
        
        self.__beginPoint=QPoint()
        self.__endPoint=QPoint()
在类中,定义了一个信号 mouseMove(QPoint)。在 mouseMoveEvent 里发射此信号并传递
鼠标光标处的屏幕坐标,用于在主窗口里实现鼠标在图表上移动时显示当前位置的坐标。
在构造函数中,通过 setDragMode()将视图组件鼠标拖动选择方式设置为“橡皮框”形式。这
样,在图标上按下鼠标框选时,随着鼠标拖动会显示一个矩形选择框,如图所示:

(一) 鼠标的事件函数:
 

    def mousePressEvent(self, event):##鼠标单击
        if event.button()==Qt.MouseButton.LeftButton:
            self.__beginPoint=event.pos()
        super().mousePressEvent(event)
        
    def mouseMoveEvent(self, event):##鼠标移动
        point=event.pos()
        self.mouseMove.emit(point)
        super().mouseMoveEvent(event)
        
    def mouseReleaseEvent(self, event):##鼠标框选放大,右键恢复
        if event.button()==Qt.MouseButton.LeftButton:
            self.__endPoint=event.pos()
            rectF=QRectF()
            rectF.setTopLeft(self.__beginPoint.toPointF())
            rectF.setBottomRight(self.__endPoint.toPointF())
            self.chart().zoomIn(rectF)
        elif event.button()==Qt.MouseButton.RightButton:
            self.chart().zoomReset()#鼠标右键释放,resetZoon
(1)mousePressEvent:在鼠标左键或右键按下时触发的事件函数。self.__beginPoint 记录
左键按下时,鼠标在视图组件中的位置。
(2)mouseMoveEvent: 鼠标在图表上移动时触发的事件函数,通过 event.pos()获取鼠标
在视图组件中的坐标 point,然后发射信号 mouseMove(point)。在使用 QmyChartView 类组 件的主窗口里,可以定义槽函数与此信号关联,通过传递的参数将视图坐标变换为图表的坐
标,从而实现鼠标光标处的坐标数值实时显示。
(3)mouseReleaseEvent:在鼠标左键或右键释放时触发的事件函数。若是鼠标左键释放,
则用 self.__endPoint 记录鼠标位置坐标。self.__beginPoint 和 self.__endPoint 就定义了鼠标
框选的矩形区域,用关联的 QChart 组件的 zoomIn(QRectF)函数对这个矩形区域进行放大。
注意这里rectF的类型是QRectF,所以需要用toPointF将__beginPoint和__endPoint从QPoint
类型转换为 QPointF 类型。
(二)键盘按键事件函数
 def keyPressEvent(self, event):
            key=event.key()
            if key ==Qt.Key.Key_Plus:# +
                self.chart().zoom(1.2)
            elif key ==Qt.Key.Key_Minus:# -
                self.chart().zoom(0.8)
            elif key==Qt.Key.Key_Left: #向左
                self.chart().scroll(10, 0)
            elif key ==Qt.Key.Key_Right:#向右
                self.chart().scroll(-10, 0)
            elif key==Qt.Key.Key_Up:#向上
                self.chart().scroll(0, -10)
            elif key==Qt.Key.Key_Down:#向下
                self.chart(0, 10)
            elif key==Qt.Key.Key_PageUp:#pageup
                self.chart().scroll(0, -50)
            elif key==Qt.Key.Key_PageDown:#pagedown
                self.chart().scroll(0, 50)
            elif key ==Qt.Key.Key_Home:#home
                self.chart().zoomReset()
keyPressEvent 是键盘按键按下时触发的事件函数,从 event.key()可以获得按下按键的名称,
判断按键然后做出缩放、移动等动作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/678658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

津津乐道设计模式 - 策略模式详解(以女友购物策略让你彻底明白)

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…

Git工具【系统学习】

第一章 Git快速入门 1.1 Git概述 Git是一个免费的,开源的分布式版本控制系统,可以快速高效地处理从小型或大型的各种项目。Git易于学习,占用空间小,性能快得惊人。 1.2 SCM概述 SCM(Software Configuration Managem…

Deepin Community Live CD New Kernel——自带6.3.8内核的镜像和apt源

镜像介绍 此镜像属于 Deepin Community Live CD 系列(Deepin Community Live CD 简称为 DCLC,Deepin Community Live CD 是什么?传送门:https://bbs.deepin.org/post/242933),New Kernel 系列镜像旨在可以…

chatgpt赋能python:Python的下载流程

Python的下载流程 Python是一款流行的编程语言,其掌握程度在当今计算机科学领域越来越受到重视。在本文中,我们将探讨Python的下载流程,为初学者提供一些有用的信息。特别是,我们将着重介绍如何在Windows操作系统上下载Python。 …

Golang每日一练(leetDay0105) 超级丑数、右侧小于当前元素的个数

目录 313. 超级丑数 Super Ugly Number 🌟🌟 315. 计算右侧小于当前元素的个数 Count-of-smaller-numbers-after-self 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练…

chatgpt赋能python:Python下载安装教程

Python下载安装教程 Python是一种高级编程语言,具有简单易学、强大多样的特点,不仅可以用来开发网站、应用程序、游戏,还可以用于数据科学、机器学习、人工智能等领域,被广泛应用于各行各业。 本文将为您提供详细的Python下载安…

MongoDB简介

目录 1、NoSQL概述 2、什么是MongoDB 3、MongoDB特点 一、MongoDB安装(docker方式) 二、MongoDB安装(普通方式) 三、MongoDB 概念解析 1、NoSQL概述 NoSQL(NoSQL Not Only SQL),意即反SQL运动,指的是…

FcaNet: Frequency Channel Attention Networks论文总结

论文:https://arxiv.org/abs/2012.11879 中文版:FcaNet: Frequency Channel Attention Networks 源码:https://github.com/cfzd/FcaNet或https://gitee.com/yasuo_hao/FcaNet 一、论文背景和出发点 问题:许多工作都集中在如何设计…

【T+】安装畅捷通T+提示安装向导找不到环境检测工具,是否手动选择环境检测工具文件夹。

【问题描述】 在windows server 2008r2系统环境下, 安装畅捷通T专属云标准版18.0软件的时候,提示: 安装向导找不到环境检测工具,是否手动选择环境检测工具文件夹(CheckEnvironment) 点击【是】手动选择&…

leetcode数据库题第六弹

leetcode数据库题第六弹 626. 换座位1280. 学生们参加各科测试的次数1321. 餐馆营业额变化增长1327. 列出指定时间段内所有的下单产品1341. 电影评分1378. 使用唯一标识码替换员工ID1393. 股票的资本损益1407. 排名靠前的旅行者1484. 按日期分组销售产品1517. 查找拥有有效邮箱…

数字基带传输

常用码型: 为了适应信道的传输,传输码型必须具备以下基本特性: 1)无直流、很少的低频分量; 2)含有码元定时信息; 3)主瓣宽度窄; 4)适用于各种信源的…

ChatGPT从入门到精通,一站式掌握办公自动化/爬虫/数据分析和可视

课程名称适应人群ChatGPT从入门到精通,一站式掌握办公自动化/爬虫/数据分析和可视 全面AI时代就在转角,道路已经铺好了“局外人”or“先行者”就在此刻等你决定 1、对ChatGPT感兴趣并希望有人手把手教学的新手 2、希望了解GPT各类应用抓住未来风口 3、希…

【软件设计师暴击考点】UML知识高频考点暴击系列

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:软件…

【Android Framework系列】第2章 Binder机制大全

1 Binder简介 1.1 什么是Binder Binder是Android中主要的跨进程通信方式。Android系统中,每个应用程序是由Android的Activity,Service,BroadCast,ContentProvider这四剑客中一个或多个组合而成,这四剑客所涉及的多进程…

【瑞萨RA_FSP】IWDT——独立看门狗定时器

文章目录 一、IWDT简介二、IWDT功能框图剖析1. IWDT 时钟源(1) 计数器时钟(2) 独立看门狗超时时间计算 2. IWDT 模块电路功能讲解3. 独立看门狗(IWDT)与看门狗(WDT)功能对比4. 怎么使用IWDT 三、IWDT实验1. 硬件设计2. 文件结构3.…

交通 | 考虑供需交互下的航空网络优化问题

编者按: 本文提出了一种包含供需交互作用的航空网络规划模型 (ANPSD),该模型同时考虑了航线选择、航班频率和机队组成等问题,还捕捉了航空公司的供应和乘客需求之间的相互依赖关系。作者将需求实证函数与 ANPSD 模型相结合,开发了…

代码随想录算法训练营第四十四天|完全背包、518. 零钱兑换 II 、377. 组合总和 Ⅳ

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一不同…

【数据结构】顺序表,链表

前言 小亭子正在努力的学习编程,接下来将开启 javaEE 的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 目录 前言 顺序表 ArrayList ArrayLi…

K8S存储值之PV和PVC

1. 概念: 1.1. PersistentVolume (PV): 是由管理员设置的存储,它是群集的一部分。就像节点是集群中的资源一样,PV也是集群中的资源。PV是Volume之类的卷插件,但具有独立于使用PV的Pod的生命周期。此API对象包含存储实…

数字图像处理-图像复原与重建

文章目录 一、图像退化/复原过程的模型二、噪声模型2.1噪声的空间和频率特性2.2一些重要的噪声概率密度函数2.2.1高斯噪声2.2.2瑞利噪声2.2.3爱尔兰(伽马)噪声2.2.4指数噪声2.2.5均匀噪声2.2.6脉冲(椒盐)噪声 2.3周期噪声 三、只存…