Я хочу кнопку. Я пытаюсь создать конечный автомат, поэтому он будет использоваться в классе QState.
Если курсор мыши наведен, кнопка меняет свой цвет.
Если левая кнопка мыши отпущена на кнопке, она должна работать.
Если левая кнопка мыши нажата на кнопке, но отпущена снаружи кнопки (перетащите курсор наружу при нажатии), кнопка не должна работать. (чтобы пользователи могли отменить пропущенный щелчок, перетащив его.)
Вот мой код, но он не работает. Когда я перетаскиваю курсор наружу и отпускаю кнопку мыши, кнопка работает.
Я проверил несколько вещей, и теперь я понимаю кое-что.
Пока кнопка мыши нажата, QPushButton.enterEvent и QPushButton.leaveEvent не работают.
Когда курсор покидает QPushButton при нажатой кнопке, создается впечатление, что QPushButton.released излучает сигнал.
Как сделать эту кнопку?
class MyButton(QtWidgets.QPushButton):
selected = QtCore.pyqtSignal(bool)
def __init__(self, parent=None):
super().__init__(parent)
self.setMouseTracking(True)
self.is_hover = False
def enterEvent(self, event):
self.setStyleSheet\
("color: black; border-style: solid;\
border-width: 2px; border-color: white;\
background-color: rgba(250,0,0,1);")
self.is_hover = True
print('is_hover = True')
def leaveEvent(self, event):
self.setStyleSheet\
("color: white; border-style: solid;\
border-width: 2px; border-color: white;\
background-color: rgba(250,50,150,0.5);")
self.is_hover = False
print('is_hover = False')
def mouseReleaseEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
if self.is_hover:
self.selected.emit(True)
else:
return
else:
return