Как обработать событие нажатия на саму вкладку 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_())