wxpython任务栏图标
我正在尝试在我的wxpython程序中设置一个图标。到目前为止,经过阅读很多页面和示例,我已经能够在窗口上设置一个图标,这个图标在使用alt+tab切换窗口时也能正常显示(我在Windows 7上工作)。
但是,任务栏上的图标还是默认的Python图标。
我不明白为什么这么简单的任务会遇到这么多麻烦。
这是我的代码:
class GraphFrame(wx.Frame):
""" The main frame of the application
"""
title = 'My first wxprogram'
def __init__(self):
wx.Frame.__init__(self, None, -1, self.title)
ico = wx.Icon('dog.ico', wx.BITMAP_TYPE_ICO)
self.SetIcon(ico)
self.set_icon
self.create_menu()
self.create_status_bar()
self.create_main_panel()
#...
4 个回答
3
无论是TyrantWave的回答还是我的回答,在特定情况下都是正确的。这取决于Windows 7的设置:
当标签被隐藏时,图标似乎没有被设置:
当标签显示出来时,一切都正常,效果如预期:
11
我在另一个与PyQt相关的StackOverflow问题/回答中找到了修复我第二个回答中描述的问题的方法。在你的应用程序创建图形界面之前,添加以下代码:
import ctypes
myappid = 'mycompany.myproduct.subproduct.version' # arbitrary string
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
这样图标就会在任务栏按钮设置中正确显示。
详细解释可以在这里找到: https://stackoverflow.com/a/1552105/674475
3
现在通过wxPython设置任务栏图标是不可能的(除非你去修改系统变量),这是因为Windows会从可执行文件中获取应用程序的图标(在你的情况下,就是Python)。
如果你使用pyinstaller
或py2exe
(我更喜欢前者),在编译的时候可以设置应用程序的图标,这样任务栏的图标就会正确显示。
如果使用pyinstaller
,你需要在spec文件中这样设置图标:
exe = EXE(pyz,
a.scripts,
a.binaries,
a.datas,
name=os.path.join('..\\path\\to\\output', 'AppName.exe'),
icon='C:\\abs\\path\\to\\icon\\icon.ico',
debug=False,
strip=False,
upx=False,
console=False )
icon=...
这一行就是用来设置任务栏图标的。
你其他的Python代码可以保持不变。