在Mac OS上设置tkinter图标

Jak*_*ake 7 python macos icons cross-platform tkinter

我正在尝试更改我的Mac OS应用程序上显示的图标.我最后一次检查此代码适用于Windows.目标是使此解决方案适用于所有平台.

root = tk.Tk()
app = Application(master=root)

app.master.iconbitmap("my_icon.ico")

app.mainloop()
Run Code Online (Sandbox Code Playgroud)

代码正在添加.pdf文件的默认图标,这不是我的意图.通往的路径my_icon.ico是正确的.为什么这不适用于Mac OS?是否有跨平台工作的终极解决方案?

Mik*_*SMT 7

根据tk tcl文档您可能想尝试一下wm iconphoto。它似乎可能支持 OSX,并且还提到将文件设置为 512x512 左右,以便在 MAC 中平滑渲染。

我没有 MAC,所以我无法对此进行测试,但请尝试一下,让我知道它是否有帮助。

更新:

正如@l'L'l 指出的,你可能想尝试一下root.iconphoto(True, img)。由于没有Mac,我无法自己测试。

import tkinter as tk

root = tk.Tk()
img = tk.Image("photo", file="icon.gif")
# root.iconphoto(True, img) # you may also want to try this.
root.tk.call('wm','iconphoto', root._w, img)

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

以下是此处文档中的相关文本:

wm iconphoto 窗口?-默认?图像 1?图像 2 ...?根据命名的照片图像设置窗口的标题栏图标。如果指定了 -default,则这也适用于所有将来创建的顶层。图像中的数据在调用时被视为快照。如果稍后更改图像,则不会反映到标题栏图标。接受多个图像以允许提供不同的图像尺寸(例如,16x16 和32x32)。窗口管理器可以将所提供的图标缩放至适当的尺寸。在 Windows 上,图像被打包到 Windows 图标结构中。这将覆盖指定给 wm iconbitmap 的 ico,反之亦然。

在 X 上,图像被排列到 _NET_WM_ICON X 属性中,大多数现代窗口管理器都支持该属性。wm iconbitmap 可以同时存在。建议使用不超过 2 个图标,将较大的图标放在前面。

在 Macintosh 上,调用的第一个图像会加载为 OSX 本机图标格式,并成为对话框、Dock 和其他上下文中的应用程序图标。在脚本级别,该命令将仅接受参数中传递的第一个图像,因为 macOS 上对多种尺寸/分辨率的支持超出了 Tk 的范围。开发人员应使用他们可以支持的最大图标(最好是 512 像素),以确保在 Mac 上流畅渲染。

我确实在 Windows 上进行了测试,以确保它至少可以在 Windows 上运行。我使用蓝色方形图像进行测试。

如果上述文档准确的话,它也应该适用于 MAC。

在此输入图像描述