【问题标题】:PyInstaller icon option doesn't work on MacPyInstaller 图标选项在 Mac 上不起作用
【发布时间】:2020-10-08 14:42:14
【问题描述】:

我在我的 Mac 上运行了以下命令并创建了一个 .app 文件。

pyinstaller --icon icon.icns --noconsole -n testApp main.py

但是,生成的 .app 文件不显示图标。

icon.icns 被指定为 info.plist 中的图标文件。

Content/Resouces 文件夹包含 icon.icns。

当我运行 .app 文件时,我在 Dock 上看到一个图标。

但是,该图标不会反映在 .app 文件本身中。这是为什么呢?

【问题讨论】:

  • 您是否尝试过使用.ico 文件而不是.icns
  • 在创建 macOS .app 包时不要使用 .ico。仅支持创建带有图标的 Windows 应用程序。
  • 是的,windows 使用.ico,macOS 使用.icns
  • 查找器中的某些设置是否可能需要调整?

标签: python macos icons pyinstaller icns


【解决方案1】:

您应该使用该命令来创建 macOS 应用程序包

如果指定正确,在运行 pyinstaller 命令后,icon.icns 将被复制到 Resources 文件夹并应用于 dist 目录中的 testApp.app 包。 (不要按照建议尝试 .ico,这是适用于 Windows 的)。

我刚刚尝试使用 PySide2 创建一个简单的 Python 应用程序,它在应用程序包中包含图标文件,没有任何问题。

鉴于 icon.icns 与main.py 位于同一目录

你的命令应该是:

$ pyinstaller --onefile --windowed --icon icon.icns --name testApp main.py

这将生成应用程序包,您应该可以正常运行它。


但等等,还有更多……

遗憾的是,故事并没有到此结束。

剧透:

要以“正确的方式”做事并让 macOS 开心,您还应该包括:

--osx-bundle-identifier 'YOUR_IDENTIFIER'

这样,规范文件将包含生成的Info.plist 文件的信息。

规范文件中还应该有一个部分描述Info.plist 的内容,内容如下:

app = BUNDLE(exe,
         name='testApp.app',
         icon='icon.icns',
         bundle_identifier='com.youridentifier',
         info_plist={
            'NSPrincipalClass': 'NSApplication',
            'NSAppleScriptEnabled': False,
            'CFBundleDocumentTypes': [
                {
                    'CFBundleTypeName': 'My File Format',
                    'CFBundleTypeIconFile': 'MyFileIcon.icns',
                    'LSItemContentTypes': ['com.example.myformat'],
                    'LSHandlerRank': 'Owner'
                    }
                ]
            },
         )

在上面的例子中,键/值 'NSPrincipalClass': 'NSApplication' 是允许 Mac OS X 使用视网膜分辨率渲染应用程序所必需的。

'NSAppleScriptEnabled' 被分配了 Python 布尔值 False,它将作为 <false/> 输出到 Info.plist。最后,CFBundleDocumentTypes 键告诉 Mac OS X 您的应用程序支持哪些文件类型(如果有)。

【讨论】:

  • 不错的答案! +1,我已经手动授予了赏金。
  • @Legorooj 谢谢!如果 OP 关心它,或者他只是想让他的应用程序启动并显示一个图标,我会填写更多细节! ?
【解决方案2】:

临时解决方法是在 Finder 中简单地获取 .icns 文件的信息;单击并复制“获取信息”窗口左上角的图像;然后将该 .icns 图像粘贴到应用程序“获取信息”窗口上的相同位置。您还可以通过该方法将 .icns 图像从任何现有应用程序复制到任何其他应用程序。我相信这个功能在 Mac 上已经存在了二十多年。尽管如此,最终还是应该将其编码到 Info.plist 内容中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2013-08-04
    • 2012-04-15
    • 2017-12-06
    相关资源
    最近更新 更多