Как обработать событие нажатия на саму вкладку MenuBar

self.menu_1.aboutToShow.connect(lambda: self.MainWidget())  # Нажатие на вкладку 
self.menu_2.aboutToShow.connect(lambda: self.SettingsWidget(None))
    
self.action_2.triggered.connect(lambda: self.MainWidget())  # Нажатие на вложенное действие во владке

Это единственный способ, который я нашёл.

Мне нужно сделать так, чтобы при нажатии на саму вкладку MenuBar'a в PyQt открывался виджет. С вложенным меню понятно как сделать, а вот тут возникли проблемы.


Ответы (1 шт):

Автор решения: Alexander Chernin

Надо наследоваться от QMenuBar, переопределить один из его, например, "мышиных" методов (или любой другой) и установить этот новый менюбар в качестве основного в вашем окне.

Рабочий пример:

import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QMenuBar, QMainWindow, QMenu

from PyQt5.QtCore import Qt

# Наш меню бар
class MyMenuBar(QMenuBar):

    def __init__(self, parent=None):
        super(MyMenuBar, self).__init__(parent)

    # Переопределяем нажатие кнопки мыши
    def mousePressEvent(self, event):
        # Для примера создаем и показываем QMenu в точке клика
        pop = QMenu()
        pop.addAction("Item 1")
        pop.addAction("Item 2")
        pop.exec_(event.globalPos())

# Главное окно приложения
class MyWindow(QMainWindow):

    def __init__(self):
        super(MyWindow, self).__init__()

        # Устанавливаем MyMenuBar в качестве основного
        self.setMenuBar(MyMenuBar())

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')

if __name__ == '__main__':
    app = QApplication(sys.argv)

    win = MyWindow()
    win.show()

    sys.exit(app.exec_())
→ Ссылка