Dans mon application, j'ai un QGraphicsScene où l'utilisateur devrait être en mesure de changer la couleur des éléments en cliquant sur le bouton de la souris et passer la souris sur les éléments.Survolez l'événement en cliquant sur PyQt
Ci-dessous un exemple de code que j'emprunté à une autre question:
PyQt: hover and click events for graphicscene ellipse
from PyQt5 import QtGui, QtCore, QtWidgets
class MyFrame(QtWidgets.QGraphicsView):
def __init__(self, parent = None):
super(MyFrame, self).__init__(parent)
self.setScene(QtWidgets.QGraphicsScene())
# add some items
x = 0
y = 0
w = 15
h = 15
pen = QtGui.QPen(QtGui.QColor(QtCore.Qt.green))
brush = QtGui.QBrush(pen.color().darker(150))
# i want a mouse over and mouse click event for this ellipse
for xi in range(3):
for yi in range(3):
item = callbackRect(x+xi*30, y+yi*30, w, h)
item.setAcceptHoverEvents(True)
item.setPen(pen)
item.setBrush(brush)
self.scene().addItem(item)
item.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
class callbackRect(QtWidgets.QGraphicsRectItem):
'''
Rectangle call-back class.
'''
def mouseReleaseEvent(self, event):
# recolor on click
color = QtGui.QColor(180, 174, 185)
brush = QtGui.QBrush(color)
QtWidgets.QGraphicsRectItem.setBrush(self, brush)
return QtWidgets.QGraphicsRectItem.mouseReleaseEvent(self, event)
def hoverMoveEvent(self, event):
# Do your stuff here.
pass
def hoverEnterEvent(self, event):
color = QtGui.QColor(0, 174, 185)
brush = QtGui.QBrush(color)
QtWidgets.QGraphicsRectItem.setBrush(self, brush)
def hoverLeaveEvent(self, event):
color = QtGui.QColor(QtCore.Qt.green)
brush = QtGui.QBrush(color.darker(150))
QtWidgets.QGraphicsRectItem.setBrush(self, brush)
if (__name__ == '__main__'):
app = QtWidgets.QApplication([])
f = MyFrame()
f.show()
app.exec_()
Ainsi, dans ce code, les méthodes de vol stationnaire ne sont appelés quand il n'y a pas de bouton de la souris enfoncé. Comme indiqué dans la documentation (pour PySide), mousePressEvent "décide quel élément graphique reçoit les événements de la souris", ce qui bloque d'une certaine manière les événements de la souris pour les autres éléments.
Cependant, est-il un moyen de tenir simultanément sur le bouton de la souris enfoncé et appeler les événements de vol stationnaire de différents éléments?
Expliquer mieux, votre explication est source de confusion, vous voulez que cela se produise lorsque l'élément est pressé et lorsque la souris est plané l'élément – eyllanesc
Donc, je veux cliquer à une position à côté de l'élément et pendant que je déplace le curseur dessus (et le bouton de la souris est encore cliqué) un événement de survol de cet élément doit être déclenché. –
Je comprends l'événement que vous voulez, quelle tâche voulez-vous faire quand cela arrive? – eyllanesc