在Mac OS上设置tkinter图标

时间:2018-10-16 01:23:01

标签: python macos tkinter icons cross-platform

我正在尝试更改Mac OS的tk应用程序中显示的图标。我上次检查此代码对Windows有效。该解决方案的目标是在所有平台上都能正常工作。

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

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

app.mainloop()

代码为.pdf文件添加了默认图标,这不是我想要的。 my_icon.ico的路径正确。为什么这不适用于Mac OS?是否有最终的解决方案可以跨平台使用?

3 个答案:

答案 0 :(得分: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为   指定,这也将应用于将来创建的所有顶级。   图像中的数据在拍摄时作为快照   调用。如果以后更改图像,则不会反映到   标题栏图标。接受多张图片以允许不同   要提供的图片尺寸(例如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上运行。

enter image description here

答案 1 :(得分: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。在该文件夹中将是您的应用程序。 (运行命令时,应该在第三步中创建了dist文件夹)

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

答案 2 :(得分: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()