我正在尝试更改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?是否有最终的解决方案可以跨平台使用?
答案 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上运行。
答案 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()