在Mac OS上设置tkinter图标

问题描述 投票:7回答:3

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

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

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

app.mainloop()

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

python macos tkinter icons cross-platform
3个回答
3
投票

根据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()

以下是documentation here的相关文字:

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

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

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

我在Windows上测试过这个,以确保它至少在那里工作。我用蓝色方形图像进行测试。

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

enter image description here


1
投票

重要说明:此方法很长,手头的任务很多。然而,它确实带来了一些无关的好处。请注意,可能有更好的方法,但这将有效。 无论如何,继续......

你可以使用py2app。

Py2app会将你的程序变成一个.app,这意味着它作为一个应用程序运行(因为它是)。当使用tkinter时,这通常是你最终想要的,因为GUI通常会变成应用程序以方便使用。你可以阅读py2app文档here,或阅读非官方但更容易理解(在我看来)教程here。我还将总结如何完成这个过程。

首先安装py2app:在命令提示符下输入:

sudo pip install -U py2app

如果成功,你应该得到py2app。如果没有,一个问题可能是你没有pip。您可以使用其他命令下载它:

sudo easy_install pip

第一步:在与程序相同的字典中创建一个名为setup.py的文件。

第二步:把它放到文件中。

from setuptools import setup

#APP would be the name of the file your code is in.
APP = ['example.py']
DATA_FILES = []
#The Magic is in OPTIONS.
OPTIONS = {
    'argv_emulation': False,
    'iconfile': 'app.icns', #change app.icns to the image file name!!!
    }

setup(
    app=APP,
    name='Your app’s name', #change to anything
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

步骤3:然后在文件所在的字典中打开bash终端并键入以下命令:

python setup.py py2app -A

-A使应用程序响应代码中的更新,但使应用程序无法使用。完成开发后,重新运行命令,这次没有-A,如下所示:

python setup.py py2app

注意:对于python 3 py2app,您可能需要使用命令python3 setup.py py2...而不是python setup.py py2...

第4步:导航到the dictionary your code is in/dist。在该文件夹中将是您的应用程序。 (运行命令时,应在步骤3中创建dist文件夹)

对于Windows用户:py2app不是应该使用的,而是使用py2exe


0
投票

如果您使用的是Mac OS,则必须使用.icns图像而不是.ico图像。

您可以使用:

from tkinter import Tk
from platform import system

platformD = system()
if platformD == 'Darwin':

    logo_image = 'images/logo.icns'

elif platformD == 'Windows':

    logo_image = 'images/logo.ico'

else:

    logo_image = 'images/logo.xbm'

root = Tk()
root.title("My App")
root.iconbitmap(logo_image)
root.resizable(0, 0)
root.mainloop()

© www.soinside.com 2019 - 2024. All rights reserved.