-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
77 lines (65 loc) · 2.39 KB
/
utils.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
# -*- coding:utf-8 -*-
# Author: KucodeAI
# Date: 2020-04-03
import sys
import datetime
from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QMessageBox, qApp
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import (
QtInfoMsg,
QtWarningMsg,
QtCriticalMsg,
QtFatalMsg
)
class SystemTray(object):
# 程序托盘类
def __init__(self, w, app):
self.app = app
self.w = w
QApplication.setQuitOnLastWindowClosed(False) # 禁止默认的closed方法,
self.w.show() # 不设置显示则为启动最小化到托盘
self.tp = QSystemTrayIcon(self.w)
self.initUI()
self.run()
# sys.stdout = EmittingStream(textWritten=self.w.output_ter_result)
# sys.stderr = EmittingStream(textWritten=self.w.output_ter_result)
def initUI(self):
# 设置托盘图标
self.tp.setIcon(QIcon('/etc/v2rayL/images/logo.ico'))
def quitApp(self):
# 退出程序
self.w.show() # w.hide() #设置退出时是否显示主窗口
re = QMessageBox.question(self.w, "提示", "确认退出?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if re == QMessageBox.Yes:
self.tp.setVisible(False) # 隐藏托盘控件
qApp.quit() # 退出程序
self.w.v2rayL.disconnect()
def act(self, reason):
# 主界面显示方法
if reason == 2 or reason == 3:
self.w.show()
def run(self):
self.w.a2.triggered.connect(self.quitApp)
self.tp.setContextMenu(self.w.tpMenu)
self.tp.show() # 不调用show不会显示系统托盘消息,图标隐藏无法调用
# 绑定提醒信息点击事件
# self.tp.messageClicked.connect(self.message)
# 绑定托盘菜单点击事件
self.tp.activated.connect(self.act)
sys.exit(self.app.exec_()) # 持续对app的连接
def qt_message_handler(mode, context, message):
if mode == QtInfoMsg:
mode = 'INFO'
elif mode == QtWarningMsg:
mode = 'WARNING'
elif mode == QtCriticalMsg:
mode = 'CRITICAL'
elif mode == QtFatalMsg:
mode = 'FATAL'
else:
mode = 'DEBUG'
msg = message.split("@$ff$@")
if len(msg) == 2 and msg[0] == "True":
with open("/etc/v2rayL/v2rayL_op.log", "a+") as f:
f.write(' %s - %s: %s\n' % (datetime.datetime.now(), mode, msg[1]))