当前位置: 首页 > news >正文

PySide(PyQt),使用types.MethodType动态定义事件

        以PySide(PyQt)的图片项为例,比如一个视窗的场景底图是一个QGraphicsPixmapItem,需要修改它的鼠标滚轮事件,以实现鼠标滚轮缩放显示的功能。为了达到这个目的,可以重新定义一个QGraphicsPixmapItem类,并重写它的wheelEvent()函数:

class MyGraphicsPixmapItem(QGraphicsPixmapItem):def __init__(self, pixmap):super().__init__(pixmap)def wheelEvent(self, event):self.setScale(self.scale() * (1.001 ** event.delta()))

然后在代码中实例化这个类就可以了,这没有任何问题。

        需求的提出:

        首先,场景中只有这一个场景底图,而且我仅仅只需要修改它的鼠标滚轮事件响应这个函数,为了这简单的一个需求重建一个新的类,不是那么优雅。然后,鼠标滚轮缩放显示的这个功能,我还想用到别的目标上,需要复用和方便移植。或者,鼠标滚轮的事件响应,我需要在程序中根据工况不同动态改变。为此,可以采用types.MethodType动态定义事件方法:

from PySide6.QtCore import Qt
from PySide6.QtGui import QPixmap
from PySide6.QtWidgets import QGraphicsScene, QGraphicsView, QApplication, QGraphicsPixmapItem, QGraphicsItem, \QGraphicsRectItem
import typesapp = QApplication([])# 鼠标滚轮缩放的功能(附加检测shift键缩放)
def wheelZoom(graphics_item, event):if event.modifiers() & Qt.ShiftModifier:graphics_item.setScale(graphics_item.scale() * (1.001 ** event.delta()))# ############不检测shift键缩放###############
# def wheelZoom(graphics_item, event):
#     graphics_item.setScale(graphics_item.scale() * (1.001 ** event.delta()))
# ##########################################
def hover_enter_event(graphics_item, event):print("鼠标进入")event.accept()def hover_leave_event(graphics_item, event):print("鼠标离开")event.accept()scene = QGraphicsScene()  # 创建场景对象
view = QGraphicsView(scene)  # 创建视图对象# 设置场景并显示
view.setScene(scene)
view.show()
pixmap = QPixmap("example.jpg")  # 加载图片
pixmap_item = QGraphicsPixmapItem(pixmap)  # 创建图片对象
scene.addItem(pixmap_item)  # 将图片添加到场景中rect_item = QGraphicsRectItem(100,100,100,100)  # 创建一个矩形对象
scene.addItem(rect_item)  # 将矩形添加到场景中pixmap_item.setAcceptHoverEvents(True)  # 设置图片接受鼠标事件
pixmap_item.wheelEvent = types.MethodType(wheelZoom, pixmap_item)  # 给图像项添加滚轮缩放事件
rect_item.wheelEvent = types.MethodType(wheelZoom, rect_item)  # 给图像项添加滚轮缩放事件
pixmap_item.hoverEnterEvent = types.MethodType(hover_enter_event, pixmap_item)  # 给图像项添加鼠标进入事件
pixmap_item.hoverLeaveEvent = types.MethodType(hover_leave_event, pixmap_item)  # 给图像项添加鼠标离开事件app.exec()
上面的代码,定义了几个方法,并且将其动态绑定到了图片项的实例,实现了所需的功能。

        在另一个demo中,使用types.MethodType在一个类中定义了另一个类的内部函数,实现了复杂的操作,在将一个类的操作与另一个类的特性关联起来:

import types
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QGraphicsTextItem, QGraphicsScene, QGraphicsView, QGraphicsRectItemclass MyTextItem(QGraphicsTextItem):def __init__(self, text, parent=None):super().__init__(text, parent)self.parentRect = parent  # 设置输入底框self.parentRect.setZValue(-1)  # 设置输入底框到底层self.initText = self.toPlainText()  # 设置初始文字内容self.setup()def setup(self):# 重新定义鼠标双击事件def mouse_doubleClickEvent(item, event):QGraphicsRectItem.mouseDoubleClickEvent(item, event)  # 保留原有事件if self.toPlainText() == self.initText:self.setPlainText("")  # 清空文字self.setFocus()  # 设置焦点self.parentRect.mouseDoubleClickEvent = types.MethodType(mouse_doubleClickEvent, self.parentRect)  # 重新定义输入底框鼠标双击事件# 重新定义鼠标按下事件def mouse_pressEvent(item, event):QGraphicsRectItem.mousePressEvent(item, event)  # 保留原有事件if event.button() == Qt.LeftButton:  # 左键按下self.setTextInteractionFlags(Qt.TextEditorInteraction)  # 设置为可编辑状态self.setFocus()  # 设置焦点self.parentRect.mousePressEvent = types.MethodType(mouse_pressEvent, self.parentRect)   # 重新定义输入底框鼠标左键事件if __name__ == '__main__':import sysfrom PySide6.QtWidgets import QApplicationapp = QApplication(sys.argv)# 创建场景和视图scene = QGraphicsScene()view = QGraphicsView(scene)parentItem = QGraphicsRectItem(0,0,200,200)  # 创建输入底框item = MyTextItem("请输入文本内容" ,parent=parentItem)  # 创建输入框scene.addItem(parentItem)  # 将输入底框添加到场景中view.show()   # 显示视图sys.exit(app.exec())

 types的更多学习笔记见:Python的types库学习记录-CSDN博客

相关文章:

PySide(PyQt),使用types.MethodType动态定义事件

以PySide(PyQt)的图片项为例,比如一个视窗的场景底图是一个QGraphicsPixmapItem,需要修改它的鼠标滚轮事件,以实现鼠标滚轮缩放显示的功能。为了达到这个目的,可以重新定义一个QGraphicsPixmapItem类,并重写它的wheelE…...

c语言基础编程入门练习题

[编程入门]成绩评定 题目描述 给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。 90分以及90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。 输入格式 一个整数0-100…...

汽车安全确认等级-中国等保

1、概念解析 网络安全保证等级(Cybersecurity Assurance Level)通常指在不同标准或框架下,根据系统或数据的敏感性、重要性以及潜在风险划分的等级,用于指导组织采取相应的安全防护措施。以下是几个常见的网络安全保证等级体系及…...

Quartus + VScode 实现模块化流水灯

文章目录 一、通过VScode编写Verilog代码二、模块化编程三、代码示例 一、通过VScode编写Verilog代码 1、下载Vscode 2、下载相关插件 搜索Verilog就会弹出有如图所示的插件,下载并安装 3、创建Quartus项目 4、创建完成后点击Tools,选择Options 然后在…...

从两指到三指:Robotiq机器人自适应夹持器技术解析

工业自动化离不开高效工具的支持。Robotiq机器人工具凭借其模块化设计和智能化编程技术,提升了设备的灵活性和操作效率。Robotiq机器人工具精准的传感器和自适应夹持器技术,能够满足多样化的应用需求,为制造业、物流和科研等领域提供可靠的解…...

网络安全应急入门到实战

奇安信:95015网络安全应急响应分析报告(2022-2024年)官网可以下载 https://github.com/Bypass007/Emergency-Response-Notes 应急响应实战笔记 网络安全应急响应技术实战指南 .pdf 常见场景 第4章 勒索病毒网络安全应急响应 第5章 挖矿木…...

Flutter IconButton完全指南:高效使用与性能优化秘籍

目录 一、引言 二、IconButton 的基本用法 三、 进阶技巧 3.1 自定义形状与背景 3.2 带文本的 IconButton(使用 Column 组合) 3.3 自定义交互反馈 3.4 动态图标切换 3.5 组合式按钮(图标 文字) 四、高级应用 4.1 与主题…...

跨国生产制造企业:如何破解远距离数据传输难题?

在全球制造业数字化转型的背景下,跨国生产制造企业的文件传输需求正呈现指数级增长。无论是设计图纸、生产计划、质量控制数据,还是供应链协同信息,跨国文件传输已成为制造业高效运营的核心环节。 然而,制造业文件大数据传输具有文…...

大模型如何赋能安全防御?威胁检测与漏洞挖掘的“AI革命”

🚀 引言:大模型是“安全守护神”还是“双刃剑”? 当黑客用AI生成恶意代码,安全团队也能用大模型“魔法打败魔法”! 划重点:大模型不仅是“生产力工具”,更是安全防御的“智能武器库”&#xff0…...

uniapp常用组件

写在前面 今天将uniapp中的组件都过了一遍,上手难度不大,但是还是遇到了一些问题: HBuilder实在是太难用,不管是插件生态还是设计之类的,总之就是用的哪哪不顺手虽然打开内置浏览器是挺方便的,但是不知道…...

Oracle OCP认证没落了吗?

Oracle OCP认证没落了吗? Oracle的OCP认证是数据库领域必考的一个认证,但随着国产化的发展,国内很多企业开发了自己的数据库产品,这种情况对很多人造成了错误的认识:OCP被淘汰了吗?不然,从行业需求、技术趋势、认证体…...

洛谷 P3986 斐波那契数列

P3986 斐波那契数列 题目描述 定义一个数列: f ( 0 ) a , f ( 1 ) b , f ( n ) f ( n − 1 ) f ( n − 2 ) f(0) a, f(1) b, f(n) f(n - 1) f(n - 2) f(0)a,f(1)b,f(n)f(n−1)f(n−2) 其中 a, b 均为正整数,n ≥ 2。 问有多少种 (a, b)&…...

使用fastapi部署stable diffusion模型

使用vscode运行stable diffusion模型,每次加载模型都需要10分钟,为算法及prompt调试带来了极大麻烦。使用jupyter解决自然是一个比较好的方案,但如果jupyter由于种种原因不能使用时,fastapi无疑成为了一个很好的选择。 参考github…...

PyTorch使用(3)-张量类型转换

文章目录 张量类型转换1. 张量转换为 numpy 数组1.1. 默认行为:共享内存1.2. 避免内存共享1.2.1. 使用 .copy()1.2.2. 使用 torch.clone() .numpy() 1.3. 处理 GPU 张量1.4. 分离梯度跟踪1.5. 代码示例1.6. 关键注意事项1.7. 总结 2. 标量张量和数字的转换2.1. tor…...

基于FPGA的DDS连续FFT 仿真验证

基于FPGA的 DDS连续FFT 仿真验证 1 摘要 本文聚焦 AMD LogiCORE IP Fast Fourier Transform (FFT) 核心,深入剖析其在 FPGA 设计中的应用。该 FFT 核心基于 Cooley - Tukey 算法,具备丰富特性,如支持多种数据精度、算术类型及灵活的运行时配置。文中详细介绍了其架构选项、…...

【Spring 默认是否管理 Request 和 Session Bean 的生命周期?】

要测试 Spring 默认是否管理 Request 和 Session 作用域的 Bean 的生命周期,可以通过以下步骤实现: 验证 Spring 是否创建了 Bean:检查 Spring 容器是否成功加载并管理了 Request 和 Session 作用域的 Bean。验证 Bean 的生命周期回调方法是…...

Git的基本指令

一、回滚 1.git init 在项目文件夹中打开bash生成一个.git的子目录,产生一个仓库 2.git status 查看当前目录下的所有文件的状态 3.git add . 将该目录下的所有文件提交到暂存区 4.git add 文件名 将该目录下的指定文件提交到暂存区 5.git commit -m 备注信…...

【微信小程序(云开发模式)变通实现DeepSeek支持语音】

整体架构 前端(微信小程序): 使用微信小程序云开发能力,实现录音功能。将录音文件上传到云存储。调用云函数进行语音识别和 DeepSeek 处理。界面模仿 DeepSeek,支持文本编辑。 后端(云函数 Node.js&#…...

前端使用 crypto-js库AES加解密

前端使用 crypto-js库AES加解密 为什么需要前端加密? 现在项目使用http协议,且登录界面的用户登录密码是明文传输,项目真正上线后,存在信息泄露风险。 所以准备用前端框架加密处理用户输入的密码再传输。 crypto-js 库 crypto…...

七天MySQL密集学习计划

七天MySQL密集学习计划 第1天:MySQL基础和环境搭建 上午(理论安装) 数据库基本概念MySQL是什么关系型数据库基础安装MySQL Windows/Mac下安装步骤MySQL Workbench安装 基本配置和连接 下午(基础操作) 数据库和表的…...

Python程序常用的配置文件格式及例子(上)

Python 中常用的配置文件格式有多种,每种格式都有其特点和适用场景。以下是常见的配置文件类型及简要说明: 1. INI 格式 特点:简单键值对,支持分节(Section)。文件扩展名:.ini, .cfgPython 库&…...

Go语言对于MySQL的基本操作

一.下载依赖 终端中输入: go get -u github.com/go-sql-driver/mysql 导入包 import ("database/sql"_ "github.com/go-sql-driver/mysql" ) 二.案例 package main//go get-u github.com/go-sql-driver/mysql 获取驱动 import ("databa…...

一键批量txt转DWG,DWG转txt——插件实现 CAD c#二次开发

如下图,我们有大量dwg需要转为txt格式,或txt格式坐标需要转为dwg格式,此插件可一键完成一个文件夹下所有文件的转换。 插件使用方式 命令行输入: netload 加载此dll插件, 输入: dwg2txt 可将dwg转为t…...

SpringBoot 集成 Minio (附带工具类)

Minio 官方文档: https://www.minio.org.cn/docs/minio/container/index.html MinIO是一个对象存储解决方案,它提供了与Amazon Web Services S3兼容的API,并支持所有核心S3功能。 MinIO有能力在任何地方部署 - 公有云或私有云,裸…...

图论——Prim算法

53. 寻宝(第七期模拟笔试) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。 不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将 所有岛屿联通…...

Linux系统上后门程序的原理细节,请仔细解释一下

在Linux系统上,后门程序通常通过隐蔽的方式绕过正常的安全机制,允许攻击者未经授权访问系统。以下是其工作原理的详细解释: 1. 隐蔽性 隐藏进程:后门程序常通过修改进程列表或使用rootkit技术隐藏自身,避免被ps、top…...

Cursor与Blender-MCP生成3D模型

随着DeepSeek的热度,各行各业接入AI智能,当然作为一个深受3D爱好者喜爱的软件——Blender,也接入了AI智能,通过Blender-MCP,开启一场Blender的智能化模型创建的世界之旅。 目录 1.准备工作2.环境配置2.1 Mac安装2.2 W…...

Object 转 JSONObject 并排除null和““字符串

public static JSONObject objToJSONObject(Object obj) throws Exception{//创建一个 HashMap 对象 map&#xff0c;用于存储对象的属性名和属性值。//key 是属性名&#xff08;String 类型&#xff09;&#xff0c;value 是属性值&#xff08;Object 类型&#xff09;Map<…...

物联网为什么用MQTT不用 HTTP 或 UDP?

先来两个代码对比&#xff0c;上传温度数据给服务器。 MQTT代码示例 // MQTT 客户端连接到 MQTT 服务器 mqttClient.connect("mqtt://broker.server.com:8883", clientId) // 订阅特定主题 mqttClient.subscribe("sensor/data", qos1) // …...

LeetCode135☞分糖果

关联LeetCode题号135 本题特点 贪心两次遍历&#xff0c;一次正序遍历&#xff0c;只比较左边&#xff0c;左边比右边大的情况 i-1 i一次倒序遍历&#xff0c;只比较右边的&#xff0c;右边比左边大 i1 i 本题思路 class Solution:def candy(self, ratings: List[int]) -&g…...

YOLO魔改之频率分割模块(FDM)

目标检测原理 目标检测是一种将目标分割和识别相结合的图像处理技术,旨在从图像中定位并识别特定目标。深度学习方法,如Faster R-CNN和YOLO系列,已成为主流解决方案。这些方法通常采用两阶段或单阶段策略,通过卷积神经网络(CNN)提取特征并进行分类和定位。 在小目标检测中…...

AI学习——卷积神经网络(CNN)入门

作为人类&#xff0c;我们天生擅长“看”东西&#xff1a;一眼就能认出猫狗、分辨红绿灯、读懂朋友的表情……但计算机的“眼睛”最初是一片空白。直到卷积神经网络&#xff08;CNN&#xff09;​的出现&#xff0c;计算机才真正开始理解图像。今天&#xff0c;我们就用最通俗的…...

【资源损坏类故障】:详细了解坏块

目录 1、物理坏块与逻辑坏块 1.1、物理坏块 1.2、逻辑坏块 2、两个坏块相关的参数 2.1、db_block_checksum 2.2、db_block_checking 3、检测坏块 3.1、告警日志 3.2、RMAN 3.3、ANALYZE 3.4、数据字典 3.5、DBVERIFY 4、修复坏块 4.1、RMAN修复 4.2、DBMS_REPA…...

Django系列教程(13)——Cookie和Session应用场景及案例

目录 什么是cookie&#xff0c;cookie的应用场景及缺点 Django中如何使用cookie Cookie使用示例 什么是session及session的工作原理 Django中如何使用会话session Session使用示例 小结 HTTP协议本身是”无状态”的&#xff0c;在一次请求和下一次请求之间没有任何状态保…...

给管理商场消防安全搭建消防安全培训小程序全过程

一、需求沟通 “我是管理商场消防安全的嘛&#xff0c;做这个的作用呢&#xff0c;1是商场的所有商户员工可以看平面或者视频随时自学&#xff0c; 2是我们定期培训必修课程、考试&#xff0c;这个需要留存他们的手签字的签到表确认我们讲给他们听了&#xff08;免责很重要&am…...

YOLOv11 目标检测

本文章不再赘述anaconda的下载以及虚拟环境的配置&#xff0c;博主使用的python版本为3.8 1.获取YOLOv11的源工程文件 链接&#xff1a;GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 直接下载解压 2.需要自己准备的文件 文件结构如下&#xff1a;红…...

数据库原理实验报告:Powerdesigner建模E-R模型并转换表

注&#xff1a;此实验并不完整&#xff0c;仅供参考&#xff0c;如需完整版请私我留言 一、实验目的&#xff1a; 二、实验工具&#xff1a; 三、实验要求&#xff1a; 四、实验过程&#xff1a; 图文并茂&#xff0c;每一步都包含详细图片&#xff0c;总共11页word&#xff01…...

【愚公系列】《高效使用DeepSeek》018-错题本整理

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

面试八股 —— Redis篇

重点&#xff1a;缓存 和 分布式锁 缓存&#xff08;穿透&#xff0c;击穿&#xff0c;雪崩&#xff09; 降级可作为系统的保底策略&#xff0c;适用于穿透&#xff0c;击穿&#xff0c;雪崩 1.缓存穿透 2.缓存击穿 3.缓存雪崩 缓存——双写一致性 1.强一致性业务&#xff08…...

maven的安装配置

目录 一、官网下载压缩包 二、配置环境变量 设置 MAVEN_HOME 添加 MAVEN_HOME\bin 到 PATH 三、配置本机仓库和远程仓库 四、配置idea 一、官网下载压缩包 Download Apache Maven – Maven 如上图。选择这个压缩包 选择好文件&#xff0c;下载完后&#xff0c;配置环境变…...

SpringCloud系列教程(十四):Sentinel持久化

Sentinel之前已经搭建和应用成功了&#xff0c;但是它有一个很大的缺点就是官方没有提供持久化的方案&#xff0c;从项目源码上看感觉这款工具也没有完成的太好&#xff0c;所以需要我们去对它进行二次开发。要补充的功能大概如下&#xff1a; 1、将Sentinel接入nacos中&#…...

深度学习处理时间序列(1)

不同类型的时间序列任务 时间序列&#xff08;timeseries&#xff09;是指定期测量获得的任意数据&#xff0c;比如每日股价、城市每小时耗电量或商店每周销售额。无论是自然现象&#xff08;如地震活动、鱼类种群的演变或某地天气&#xff09;还是人类活动模式&#xff08;如…...

微前端 qiankun vite vue3

文章目录 简介主应用 qiankun-main vue3 vite子应用 qiankun-app-vue2 webpack5子应用 qiankun-react webpack5子应用 quankun-vue3 vite遇到的问题 简介 主要介绍以qiankun框架为基础&#xff0c;vite 搭建vue3 项目为主应用&#xff0c;wepack vue2 和 webpack react 搭建的…...

【ArduPilot】Windows下使用Optitrack通过MAVProxy连接无人机实现定位与导航

Windows下使用Optitrack通过MAVProxy连接无人机实现定位与导航 配置动捕系统无人机贴动捕球配置无人机参数使用MAVProxy连接Optitrack1、连接无人机3、设置跟踪刚体ID4、校正坐标系5、配置IP地址&#xff08;非Loopback模式&#xff09;6、启动动捕数据推流 结语 在GPS信号弱或…...

【GPT入门】第24课 langfuse介绍

【GPT入门】第24课 langfuse介绍 1. langfuse概念与作用2. 代码3. 页面效果4. 设计模式1. 装饰器模式2. 上下文管理模式1. langfuse概念与作用 Langfuse是一款专为大规模语言模型(LLM)应用开发设计的开源平台。其作用主要包括以下几个方面: 提升开发效率:通过消除LLM应用构…...

基于javaweb的SpringBoot食品溯源系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

SVN简明教程——下载安装使用

SVN教程目录 一、开发中的实际问题二、简介2.1 版本控制2.2 Subversion2.3 Subversion的优良特性2.4 工作原理2.5 SVN基本操作 三、Subversion的安装与配置1. 服务器端程序版本2. 下载源码包3. 下载二进制安装包4. 安装5. 配置版本库① 为什么要配置版本库&#xff1f;② 创建目…...

AJAX的理解和原理还有概念

你想问的可能是 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09; &#xff0c;它并不是一门新的编程语言&#xff0c;而是一种在无需重新加载整个网页的情况下&#xff0c;能够与服务器进行异步通信并更新部分网页的技术。以下从基本概念、原理、优点、使用场景等…...

利用AI让数据可视化

1. 从问卷星上下载一份答题结果。 序号用户ID提交答卷时间所用时间来源来源详情来自IP总分1、《中华人民共和国电子商务法》正式实施的时间是&#xff08;&#xff09;。2、&#xff08;&#xff09;可以判断企业在行业中所处的地位。3、&#xff08;&#xff09;是指店铺内有…...

FOC——Butterworth (巴特沃斯)数字滤波器(2025.03.18)

参考链接1: [DSP] Butterworth &#xff08;巴特沃斯&#xff09;数字滤波器设计参考 参考链接2: 陈佩青《数字信号处理教程》 参考链接3: ButterWorthFIlter(巴特沃斯滤波器) 在此感谢各位前辈大佬的总结&#xff0c;写这个只是为了记录学习大佬资料的过程&#xff0c;内容基本…...