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

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

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()可以获得按下按键的名称,

判断按键然后做出缩放、移动等动作


目录
相关文章
|
30天前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
55 1
|
1月前
|
程序员 测试技术 开发工具
豆瓣评分7.9!世界级讲师耗时5年整理出的Python学习手册!
Python是一门流行的开源编程语言,广泛用于各个领域的独立程序与脚本化应用中。它不仅免费、可移植、功能强大,同时相对简单,而且使用起来充满乐趣。从软件业界的任意一角到来的程序员,都会发现Python着眼于开发者的生产效率以及软件质量,因此无论你的项目是大还是小,选择Python都将带来战略性的优势。 今天给小伙伴们分享的这份手册讲述了完整的Python语言,力争满足“语言”和“原理”两个方面的需求,并拥有足够的深度以便实用。废话不多说,下面展示给大家。
|
1月前
|
数据采集 数据可视化 Ruby
GitHub星标破万!Python学习教程(超详细),真的太强了!
Python 是一门初学者友好的编程语言,想要完全掌握它,你不必花上太多的时间和精力。 Python 的设计哲学之一就是简单易学,体现在两个方面: 1. 语法简洁明了:相对 Ruby 和 Perl,它的语法特性不多不少,大多数都很简单直接,不玩儿玄学。 2. 切入点很多:Python 可以让你可以做很多事情,科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,总有一个是你感兴趣并且愿意投入时间的。
|
1月前
|
机器学习/深度学习 开发者 Python
Python 与 R 在机器学习入门中的学习曲线差异
【8月更文第6天】在机器学习领域,Python 和 R 是两种非常流行的编程语言。Python 以其简洁的语法和广泛的社区支持著称,而 R 则以其强大的统计功能和数据分析能力受到青睐。本文将探讨这两种语言在机器学习入门阶段的学习曲线差异,并通过构建一个简单的线性回归模型来比较它们的体验。
49 7
|
1月前
|
JSON API 开发者
Python学习Get方式通过商品 ID请求 获取拼多多商品详情数据接口
拼多多商品详情数据接口服务使开发者或商家能编程获取平台商品详情,涵盖标题、价格、销量等关键信息,助力市场分析与决策。使用前需注册开发者账号并获取API密钥;构造含商品ID等参数的请求URL后发送至API服务器;接口以JSON格式返回数据。应用场景包括商品销售分析、选品、品牌口碑挖掘及竞品分析,为商家提供强大数据支持。
|
1月前
|
算法 数据挖掘 大数据
深入学习Python的性能优化
【8月更文挑战第9天】深入学习Python性能优化涵盖设定明确目标、运用timeit与cProfile等工具诊断瓶颈、优化代码结构与算法、采用并行/并发技术、利用生成器与第三方库等策略。这是一个持续学习的过程,旨在全面提升代码效率与响应速度。
29 1
|
1月前
|
数据采集 人工智能 数据可视化
【2023年电工杯竞赛】B题 人工智能对大学生学习影响的评价 数学建模方案和python代码
本文介绍了2023年电工杯竞赛B题的数学建模方案和Python代码实现,详细阐述了如何分析调查问卷数据,建立评价指标体系,构建数学模型评估人工智能对大学生学习的影响,并提供了数据预处理、特征编码、可视化分析等代码示例。
39 0
【2023年电工杯竞赛】B题 人工智能对大学生学习影响的评价 数学建模方案和python代码
|
1月前
|
数据可视化 Linux API
Tkinter与PyQt的对比
【8月更文挑战第3天】本文对比了Python中两大GUI工具包Tkinter与PyQt。Tkinter作为Python标准库的一部分,易于学习且轻量级,适合快速开发简单的跨平台GUI应用。PyQt功能强大且灵活,支持复杂应用的开发,更适合有经验的开发者。通过示例代码展示了如何使用这两种工具包创建基本的GUI应用及图像查看器,帮助读者理解它们的不同之处。选择哪个工具包取决于项目的具体需求、开发者的经验以及对功能和性能的要求。
64 4
|
30天前
|
存储 JSON 测试技术
Python中最值得学习的第三方JSON库
Python中最值得学习的第三方JSON库
|
1月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络不再是黑魔法!Python带你一步步拆解,让AI学习看得见
【8月更文挑战第3天】神经网络,曾被视为难以触及的黑魔法,现已在Python的助力下变得平易近人。以TensorFlow或PyTorch为“魔法杖”,仅需几行Python代码即可构建强大的AI模型。从零开始,我们将教导AI识别手写数字,利用经典的MNIST数据集。通过数据加载、预处理至模型训练与评估,每个步骤都如精心编排的舞蹈般清晰可见。随着训练深入,AI逐渐学会辨认每个数字,其学习过程直观展现。这不仅揭示了神经网络的奥秘,更证明了任何人都能借助Python创造AI奇迹,共同探索未来的无限可能。
36 2