слот к правой кнопке меню не работает - PullRequest
1 голос
/ 23 марта 2020

Я написал приведенный ниже код, к которому мне наконец-то удалось добавить меню, но меню подключения к функции, похоже, не работает:

import os
from PyQt5 import uic
from PyQt5 import QtWidgets
from PyQt5 import QtCore

FILE_LOCATION = os.path.dirname(os.path.realpath(__file__))


class MainDialogWindow(QtWidgets.QDialog):
    def __init__(self):
        super(MainDialogWindow,self).__init__()
        ui_file = os.path.join(FILE_LOCATION, "example.ui")
        self._ui = uic.loadUi(ui_file, self)
        self.registerCallbacks()
        self.initUI()

    def initUI(self):
        """Initialize the UI.
        """
        self.textBrowser.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)

    def registerCallbacks(self):
        self.textBrowser.customContextMenuRequested.connect(self.context_menu)
        # self.connect(self.textBrowser, QtCore.Signal('customContextMenuRequested(const QPoint &)'), self.context_menu)

    def context_menu(self, pos):
        menu = QtWidgets.QMenu(self)
        action = menu.addAction("clear")
        menu.exec_(self.mapToGlobal(pos))
        action.trigered.connect(self.clear)

    def clear(self):
        """Slot to claer text.
        """
        print("clear")

if __name__ == '__main__':

    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MainDialogWindow()
    window.show()
    window.setGeometry(500, 300, 300, 300)
    sys.exit(app.exec_())

пожалуйста, помогите, я хочу вызвать функцию очистки справа нажмите меню

1 Ответ

0 голосов
/ 23 марта 2020

Кажется, я не понимаю, как работает метод menu.exec_ (), который блокирует выполнение последовательных задач, пока пользователь не выберет QAction из QMenu. В вашем случае, например, до тех пор, пока вы не нажмете «очистить» и сработавший сигнал не сработает (примечание: у вас есть опечатка), но в этот момент соединение отсутствует, поэтому метод очистки вызываться не будет. Решение состоит в том, чтобы установить соединение перед вызовом QMenu exec _ ():

def context_menu(self, pos):
    menu = QtWidgets.QMenu(self)
    action = menu.addAction("clear")
    <b>action.triggered.connect(self.clear)</b>
    menu.exec_(self.mapToGlobal(pos))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...