我正在尝试更改我的Mac OS应用程序上显示的图标。我最后一次检查此代码是否适用于Windows。目标是使此解决方案适用于所有平台。
root = tk.Tk()
app = Application(master=root)
app.master.iconbitmap("my_icon.ico")
app.mainloop()
代码正在添加.pdf文件的默认图标,这不是我的意图。通往my_icon.ico
的路径是正确的。为什么这不适用于Mac OS?是否有跨平台工作的终极解决方案?
根据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。
重要说明:此方法很长,手头的任务很多。然而,它确实带来了一些无关的好处。请注意,可能有更好的方法,但这将有效。 无论如何,继续......
你可以使用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。
如果您使用的是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()