Дать фокус окну QMainWindow PyQt6

Делаю приложение, которое работает через иконку панели. Нужно сделать так чтобы при потери фокуса оно скрывалось(это уже есть). Проблема в том, что show() показывает окно без фокуса. activateWindow мешает закрыть окно при потери фокуса.

При нажатии на иконку должно показываться окно. А при потери фокуса этого окна оно должно скрываться(не закрываться). При повторном нажатии оно заново должно появиться с фокусом.

По хорошему ему надо дать свойство быть всегда сверху, но так оно не теряет фокус.

from PyQt6.QtWidgets import (QApplication, QSystemTrayIcon, QMenu, QMainWindow, QApplication)
from PyQt6.QtGui import (QAction, QIcon)
from PyQt6.QtCore import Qt
from sys import argv


class MainPanel(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
    
    def initUI(self):
        pass

    def focusOutEvent(self, e):
        self.hide()



def open_panel(reason):
    if reason == QSystemTrayIcon.ActivationReason.Trigger:
        print('clicked')
        # ------- тут -----------------------
        panel.show()
        panel.activateWindow()
        # -----------------------------------

if __name__ == '__main__':
    # main app
    app = QApplication(argv)
    app.setQuitOnLastWindowClosed(False)

    # tray icon
    icon = QIcon('icon.png')
    
    # tray
    tray = QSystemTrayIcon()
    tray.setIcon(icon)
    tray.setVisible(True)

    ### context menu
    # quit action
    quit_action = QAction('Закрыть приложение')
    quit_action.triggered.connect(app.quit)

    # open action
    open_action = QAction('Открыть панель')
    open_action.triggered.connect(lambda: open_panel(QSystemTrayIcon.ActivationReason.Trigger))
    
    # create menu and add actions
    context_menu = QMenu()
    context_menu.addAction(quit_action)
    context_menu.addAction(open_action)
    
    tray.setContextMenu(context_menu)
    tray.activated.connect(open_panel)

    panel = MainPanel()

    app.exec()


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