Окно разместить в панели инструментов Windows
Недавно начал изучать PyQt5 и мне захотелось чтобы при запуске моей программы ее окно на панели задач перемещалась в панель инструментов. Может кто-то знает как это сделать, я искал в интернете и не нашел.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
QSystemTrayIcon Class
Современные операционные системы обычно предоставляют специальную область на рабочем столе, называемую системный трей или область уведомлений, где долго работающие приложения могут отображать значки и короткие сообщения. ... подробнее читаем здеяь https://doc.qt.io/qt-5/qsystemtrayicon.html#reimplemented-protected-functions
Как вариант, пример, с некоторыми комментариями, ниже:
import sys
from PyQt5.Qt import *
class MainWindow(QMainWindow):
""" Чекбокс и иконки в системном трее. """
def __init__(self):
super().__init__()
self.setMinimumSize(QSize(480, 80))
self.setWindowTitle("System Tray Application")
central_widget = QWidget(self)
self.setCentralWidget(central_widget)
# Важно! Добавьте флажок, который будет зависеть от поведения программы при закрытии окна
self.check_box = QCheckBox('Minimize to Tray')
grid_layout = QGridLayout(central_widget)
grid_layout.addWidget(
QLabel("Приложение, которое можно свернуть в Tray", self), 0, 0)
grid_layout.addWidget(self.check_box, 1, 0)
grid_layout.addItem(QSpacerItem(
0, 0, QSizePolicy.Expanding, QSizePolicy.Expanding), 2, 0)
# инициализировать QSystemTrayIcon
self.tray_icon = QSystemTrayIcon(self)
self.tray_icon.setIcon(
self.style().standardIcon(QStyle.SP_ComputerIcon))
'''
Определите и добавьте шаги для работы со значком в системном трее
show - show window
hide - hide window
exit - exit from application
'''
show_action = QAction("Show", self)
quit_action = QAction("Exit", self)
hide_action = QAction("Hide", self)
show_action.triggered.connect(self.show)
hide_action.triggered.connect(self.hide)
quit_action.triggered.connect(qApp.quit)
tray_menu = QMenu()
tray_menu.addAction(show_action)
tray_menu.addAction(hide_action)
tray_menu.addAction(quit_action)
self.tray_icon.setContextMenu(tray_menu)
self.tray_icon.show()
# Переопределить closeEvent, чтобы перехватить событие закрытия окна
# Окно будет закрыто только в том случае, если в поле(check_box) нет галочки
def closeEvent(self, event):
if self.check_box.isChecked():
event.ignore()
self.hide()
self.tray_icon.showMessage(
"Tray Program",
"Application was minimized to Tray",
QSystemTrayIcon.Information,
2000
)
if __name__ == "__main__":
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec())



