Я разрабатываю программу в Python 3.7 с PyQt5, которая реализует пользовательское окно уведомлений. Для этого я создал класс Notification, показывающий окно, которое:
- открывает ссылку в браузере и закрывается при щелчке левой кнопкой мыши
- просто закрывается при щелчке правой кнопкой мыши
Я начал с использования mousePressEvent
для обнаружения кликов (точно такой же код, как показано ниже, просто заменив mouseReleaseEvent
на mousePressEvent
), и все работало нормально. Однако после переключения на mouseReleaseEvent
(поскольку в противном случае пользователь также щелкнул бы все, что находилось за окном уведомлений), программа аварийно завершает работу при щелчке правой кнопкой мыши по окну уведомлений без каких-либо исключений. Код выхода - 3221225477.
При щелчке левой кнопкой мыши по окну проблем не возникает. Похоже, что проблема вызвана вызовом self.notifier.update
, поскольку его устранение решает проблему, но я не знаю, почему или почему поведение изменилось бы при простой модификации события.
Упрощенная версия моего кода ниже.
class Notifier():
''' Manages the active notification and the notification queue.'''
def __init__(self):
self.activeNotification = None
self.queue = []
def update(self):
'''Call after killing the active notification. Processes the queue.'''
if self.queue == []:
self.activeNotification = None
else:
self.activeNotification = self.queue.pop(0)
self.activeNotification.show()
class Notification(QMainWindow):
def __init__(self, notifier, *args, **kwargs):
super().__init__(*args, **kwargs)
self.notifier = notifier
def mouseReleaseEvent(self, QMouseEvent):
if QMouseEvent.button() == Qt.LeftButton:
self.close()
webbrowser.open_new_tab(self.link)
elif QMouseEvent.button() == Qt.RightButton:
self.close()
def close(self):
'''Updates notifier and closes window'''
super().close()
self.notifier.update()