wxpython任务栏图标

5 投票
4 回答
13894 浏览
提问于 2025-04-17 17:59

我正在尝试在我的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)。

如果你使用pyinstallerpy2exe(我更喜欢前者),在编译的时候可以设置应用程序的图标,这样任务栏的图标就会正确显示。

如果使用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代码可以保持不变。

撰写回答