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

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


目录
相关文章
|
1月前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
258 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
20天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
69 7
|
1月前
|
Python
Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南
本文提供了一份详细的PySide6与VSCode联动的操作指南,包括安装配置VSCode、安装必要的扩展、配置扩展以及编辑和运行PySide6项目。文中还提到了相关工具如uic.exe、rcc.exe和designer.exe的用途,并提供了进一步学习的资源。
314 1
Python实用记录(十六):PyQt/PySide6联动VSCode便捷操作指南
|
1月前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从0到1,精通Python使用
尼恩架构团队的大模型《LLM大模型学习圣经》是一个系统化的学习系列,初步规划包括以下内容: 1. **《Python学习圣经:从0到1精通Python,打好AI基础》** 2. **《LLM大模型学习圣经:从0到1吃透Transformer技术底座》**
Python学习圣经:从0到1,精通Python使用
|
1月前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
380 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
1月前
|
开发者 Python
Python学习九:file操作
这篇文章是关于Python文件操作的详细教程,包括文件的打开、读写、关闭,以及文件备份脚本的编写和文件定位操作。
21 2
|
1月前
|
机器学习/深度学习 人工智能 架构师
|
1月前
|
机器学习/深度学习 缓存 Linux
python环境学习:pip介绍,pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。
本文介绍了Python的包管理工具pip和环境管理器conda的区别与联系。pip主要用于安装和管理Python包,而conda不仅管理Python包,还能管理其他语言的包,并提供强大的环境管理功能。文章还讨论了pip创建虚拟环境的方法,以及pip和conda的常用命令。作者推荐使用conda安装科学计算和数据分析包,而pip则用于安装无法通过conda获取的包。
72 0
|
1月前
|
XML JSON Ubuntu
Python实用记录(十五):PyQt/PySide6打包成exe,精简版(nuitka/pyinstaller/auto-py-to-exe)
本文介绍了使用Nuitka、PyInstaller和auto-py-to-exe三种工具将Python的PyQt/PySide6应用打包成exe文件的方法。提供了详细的安装步骤、打包命令和参数说明,适合新手学习和实践。
324 0
|
1月前
|
Python
python学习之旅(基础篇看这篇足够了!!!)(下)
python学习之旅(基础篇看这篇足够了!!!)(下)
27 0