一、真相
二、代码
import os, tkinter as tk
from framework.pulgin.SysTrayIcon import SysTrayIcon
class _Main: # 调用SysTrayIcon的Demo窗口
def __init__(self):
self.SysTrayIcon = None # 判断是否打开系统托盘图标
def main(self):
# tk窗口
self.root = tk.Tk()
self.root.bind("<Unmap>",
lambda event: self.Hidden_window() if self.root.state() == 'iconic' else False) # 窗口最小化判断,可以说是调用最重要的一步
self.root.protocol('WM_DELETE_WINDOW', self.exit) # 点击Tk窗口关闭时直接调用s.exit,不使用默认关闭
self.root.resizable(0, 0) # 锁定窗口大小不能改变
self.root.mainloop()
def switch_icon(s, _sysTrayIcon, icon='D:\\2.ico'):
# 点击右键菜单项目会传递SysTrayIcon自身给引用的函数,所以这里的_sysTrayIcon = s.sysTrayIcon
# 只是一个改图标的例子,不需要的可以删除此函数
_sysTrayIcon.icon = icon
_sysTrayIcon.refresh()
# 气泡提示的例子
s.show_msg(title='图标更换', msg='图标更换成功!', time=500)
def show_msg(s, title='标题', msg='内容', time=500):
s.SysTrayIcon.refresh(title=title, msg=msg, time=time)
def Hidden_window(s, icon='D:\\1.ico', hover_text="SysTrayIcon.py Demo"):
'''隐藏窗口至托盘区,调用SysTrayIcon的重要函数'''
# 托盘图标右键菜单, 格式: ('name', None, callback),下面也是二级菜单的例子
# 24行有自动添加‘退出’,不需要的可删除
menu_options = (('一级 菜单', None, s.switch_icon),
('二级 菜单', None, (('更改 图标', None, s.switch_icon),)))
s.root.withdraw() # 隐藏tk窗口
if not s.SysTrayIcon: s.SysTrayIcon = SysTrayIcon(
icon, # 图标
hover_text, # 光标停留显示文字
menu_options, # 右键菜单
on_quit=s.exit, # 退出调用
tk_window=s.root, # Tk窗口
)
s.SysTrayIcon.activation()
def exit(s, _sysTrayIcon=None):
s.root.destroy()
print('exit...')
if __name__ == '__main__':
Main = _Main()
Main.main()