gpt4 book ai didi

python - 在悬停时绘制 QGraphicsPixmapItem 边框

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:03 25 4
gpt4 key购买 nike

我正在尝试创建自己的 QGraphicsPixmapItem,我可以在其中激活悬停模式,并且我想在悬停在项目的矩形上时绘制黑色边框,并在离开矩形空间时恢复正常。

我开始了这段代码,但不知道接下来要做什么。还想做一个 paintEvent,但 QGraphicsPixmapItems 没有。所以我更加困惑,因为我认为绘画方法不一样。

class PixmapItem(QGraphicsPixmapItem):
def __init__(self, pixmap, rect, parent=None):
super().__init__(parent)
self.pixmap = pixmap
self.setPixmap(self.pixmap)
self.rect = rect
self.setAcceptHoverEvents(True)

def hoverEnterEvent(self, *args, **kwargs):
pass

我可以让悬停打印“你好”,但不能做任何其他事情,即使有一些例子,因为那些与 paintEvent 和其他类型的项目有关。

如果可能的话,我想保持项目的类型并按照我说的那样绘制边框。但也不知道这是否是一种更简单的更好方法。

最佳答案

QGraphicsItem 没有 paintEvent 方法,但有 paint()方法:

from PyQt5 import QtCore, QtGui, QtWidgets


class PixmapItem(QtWidgets.QGraphicsPixmapItem):
def __init__(self, pixmap, parent=None):
super().__init__(pixmap, parent)
self.setAcceptHoverEvents(True)
self._is_hovered = False

def hoverEnterEvent(self, event):
self._is_hovered = True
self.update()
super().hoverEnterEvent(event)

def hoverLeaveEvent(self, event):
self._is_hovered = False
self.update()
super().hoverLeaveEvent(event)

def paint(self, painter, option, widget=None):
super().paint(painter, option, widget)
if self._is_hovered:
painter.save()
pen = QtGui.QPen(QtGui.QColor("black"))
pen.setWidth(4)
painter.setPen(pen)
painter.drawRect(self.boundingRect())
painter.restore()


if __name__ == "__main__":
import sys

app = QtWidgets.QApplication(sys.argv)

scene = QtWidgets.QGraphicsScene()
view = QtWidgets.QGraphicsView(scene)
item = PixmapItem(QtGui.QPixmap("image.png"))
scene.addItem(item)
view.resize(640, 480)
view.show()
sys.exit(app.exec_())

更新:

def paint(self, painter, option, widget=None):
super().paint(painter, option, widget)
if self._is_hovered:
painter.save()
pen = QtGui.QPen(QtGui.QColor("black"))
pen.setWidth(4)
painter.setPen(pen)
r = self.boundingRect()
r.adjust(0, 0, -pen.width()/2, -pen.width()/2)
painter.drawRect(r)
painter.restore()

关于python - 在悬停时绘制 QGraphicsPixmapItem 边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56266185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com