-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAveTemp.py
114 lines (90 loc) · 3.78 KB
/
AveTemp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
from PyQt6.QtWidgets import QApplication, QSystemTrayIcon, QMenu
from PyQt6.QtGui import QIcon, QAction, QFont
from PyQt6.QtCore import Qt
import support
import sys
import workers
import hardware
import logger
import MainWindow
#Для локализации
import Entities
import localization
trans = localization.trans
languages = Entities.Languages()
class TrayWrapper:
def __init__(self):
self.app = QApplication(sys.argv)
logger.setDebug(self)
self.main()
def properQuit(self):
self.window.destroy()
hardware.setCPUtoDefault(self)
self.tray.setVisible(False)
exit(0)
def updateTray(self, result):
if result:
icon = QIcon(self.window.image)
self.tray.setIcon(icon)
#Если сменился язык — обновим пункт в меню
if self.locale != self.window.locale:
self.action.setText(trans(self.window.locale, "close"))
self.locale = self.window.locale
else:
#Если из воркера не пришел результат — значит приложение закрыли, дропаем
self.properQuit()
def onTrayIconActivated(self, reason):
if reason == QSystemTrayIcon.ActivationReason.DoubleClick:
if self.window.isHidden():
self.window.show()
self.window.setWindowState(Qt.WindowState.WindowActive)
self.window.setFocus()
else:
if self.window.windowState() != Qt.WindowState.WindowActive:
self.window.setWindowState(Qt.WindowState.WindowActive)
self.window.setFocus()
else:
self.window.hide()
@logger.log
def main(self):
#Схлопываем трей когда закрываем основное окно
self.app.setQuitOnLastWindowClosed(True)
self.window = MainWindow.Main()
app_icon = support.getResourcePath('./images/icon.png')
self.window.setWindowIcon(QIcon(app_icon))
icon = QIcon(self.window.image)
self.tray = QSystemTrayIcon()
self.tray.setIcon(icon)
self.tray.setVisible(True)
if self.window.config.getOpenMinimized():
self.window.hide()
else:
self.window.show()
self.collect_slow_data_interval = self.window.config.getCollectSlowDataInterval()
#Меню
menu = QMenu()
menu.setFont(QFont('Segoe UI Semilight', 10))
menu.setStyleSheet("QMenu::item {"
"padding: 2px 12px 2px 12px;"
"}"
"QMenu::item:selected {"
"background-color: rgb(225, 225, 225);"
"color: rgb(25, 25, 25);"
"}")
#Локализация
self.locale = self.window.locale
#Набор пунктов
self.action = QAction(trans(self.locale, "close"))
menu.addAction(self.action)
self.action.triggered.connect(self.properQuit)
self.tray.setContextMenu(menu)
#Обработка событий
self.tray.activated.connect(self.onTrayIconActivated)
#Создаем поток для обновления информации в трее
self.app_worker = workers.TrayWorker(self)
self.app_worker.result.connect(self.updateTray)
self.app_worker.start()
#Ну и запускаем
self.app.exec()
if __name__ == "__main__":
app = TrayWrapper()