Понимание того, как contextMenuEvent (или любое событие в целом) работает в PyQt5 - PullRequest
0 голосов
/ 02 августа 2020

Ниже приведен код, который генерирует пустое окно, которое при щелчке правой кнопкой мыши выводит «Событие контекстного меню!». Мне просто интересно (примерно), как это реализовано в PyQt5, потому что мне неудобно рассматривать его как полный черный ящик. Итак, я предполагаю, что здесь вы перезаписываете contextMenuEvent из QMainWindow, сводя его к простой функции print, но как это имеет какое-либо отношение к щелчку правой кнопкой мыши? Какие шаги выполняет PyQt5 с момента щелчка правой кнопкой мыши до появления сообщения «Событие контекстного меню!» печатается?

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

    def contextMenuEvent(self, event):
        print("Context menu event!")


app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

1 Ответ

0 голосов
/ 02 августа 2020

PyQt5 в основном ожидает возникновения события, а затем, после того, как оно произошло, направляет его к объекту, на который нацелено событие.

С app.exec_() вы запускаете событие Qt l oop. Событие l oop будет ожидать событий (ввод пользователя, таймеры, сетевой трафик c, датчики и т. Д. c.). В вашем случае это означает щелчок мышью, и после его получения оно отправит событие в объекты, которые на них подписались (в вашем случае главное окно). Циклы событий - обычное понятие в программировании см. Википедию .

Вы можете найти код для Qt eventl oop здесь: https://code.woboq.org/qt5/qtbase/src/corelib/kernel/qeventloop.cpp.html#224

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...