当前位置: 首页> 游戏> 评测 > 网络服务是哪个_买东西最便宜的购物平台_东莞谷歌推广_关键词组合工具

网络服务是哪个_买东西最便宜的购物平台_东莞谷歌推广_关键词组合工具

时间:2025/7/15 2:14:49来源:https://blog.csdn.net/xulibo5828/article/details/146234425 浏览次数:1次
网络服务是哪个_买东西最便宜的购物平台_东莞谷歌推广_关键词组合工具

        以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博客

关键字:网络服务是哪个_买东西最便宜的购物平台_东莞谷歌推广_关键词组合工具

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: