在我的應用程序中,我有一個QGraphicsScene,用戶應該可以通過鼠標按鈕單擊並懸停在項目上來更改項目的顏色。單擊PyQt時懸停事件
下面是一個例子代碼,這是我從另一個問題借來的:
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_()
因此,在這種代碼的懸停方法只有當沒有按下鼠標鍵調用。如文檔中所述(用於PySide),mousePressEvent「決定它接收鼠標事件的圖形項目」,它以某種方式阻止其他項目的鼠標事件。
但是,有沒有辦法同時按住鼠標按鈕,並調用不同的項目的懸停事件?
更好的解釋,你的解釋是混亂的,你希望在項目按這樣的情況發生,當鼠標懸停的項目 – eyllanesc
所以,我想單擊項目旁邊的某個位置,同時將光標移動到該位置上(並且仍然單擊鼠標按鈕),應該觸發該項目的懸停事件。 –
我瞭解你想要的事件,當它發生時你想要做什麼任務? – eyllanesc