Дать фокус окну 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()