当在控制台中测试代码时,它运行正常并且所有功能都正常工作,并且在 pyInstaller 之后问题出现了。当我按下最小化按钮时,图标不会出现在系统托盘中,而是消失,并且通常该程序不在窗口中,但它在后台运行?如果有人可以帮忙:) 我只尝试更新 pyInstaller 和 pystray,不知道该怎么做。
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['web_search.py'],
pathex=[],
binaries=[],
datas=[('ImotSearch_MIcon.png', '.'), ('sent_ads.json', 'web')],
hiddenimports=['requests', 'pystray'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=True,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[('v', None, 'OPTION')],
name='web_search',
debug=True,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=['ImotSearch_MIcon.png'],
)`
button:
def quit_window(icon, item):
icon.stop()
root.destroy()
def show_window(icon, item):
icon.stop()
root.after(0, root.deiconify)
def hide_window():
root.withdraw()
image = Image.open(r"ImotSearch_MIcon.png")
menu = (item('Exit', quit_window), item('Open', show_window))
icon = pystray.Icon("name", image, "web search", menu)
icon.run()
minimize_button = tk.Button(root, text="Minimize", command=hide_window)
minimize_button.pack(pady=5)````
问题在于你调用
root.withdraw()
隐藏主窗口,但这会导致在最小化时窗口完全消失,而不仅仅是进入系统托盘。
为了解决这个问题,不要使用
root.withdraw()
,而是使用
root.iconify()
来最小化窗口。这样窗口就会最小化到任务栏,并且可以通过点击系统托盘图标来恢复。
以下是修改后的代码:
import tkinter as tk
from PIL import Image
import pystray
from pystray.menu import Menu as menu
from pystray.menu import MenuItem as item
# ... 其他代码 ...
def hide_window():
root.iconify() # 最小化窗口到任务栏
image = Image.open(r"ImotSearch_MIcon.png")
menu = (item('Exit', quit_window), item('Open', show_window))
icon = pystray.Icon("name", image, "web search", menu)
icon.run()
# ... 其他代码 ...
这样修改后,当你点击“Minimize”按钮时,窗口会最小化到任务栏,并且在系统托盘中会出现一个图标。你可以通过点击该图标来恢复窗口,或者选择“Exit”退出程序。
标签:python,windows,pycharm,system-tray From: 78712339