代码之家  ›  专栏  ›  技术社区  ›  Jake

在Mac OS上设置tkinter图标

  •  7
  • Jake  · 技术社区  · 8 年前

    我正在尝试更改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 回复  |  直到 7 年前
        1
  •  4
  •   Mike - SMT    7 年前

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

    我没有MAC,所以我不能测试它,但给它一个机会,让我知道它是否有用。

    更新:

    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窗口?-默认?图像1?图像2。。。?设置标题栏 图像中的数据在拍摄时作为快照 调用。如果以后更改了图像,则不会反映到 提供图像尺寸(如16x16和32x32)。窗户 管理员可以将提供的图标缩放到适当的大小。在窗户上, 图像被打包成Windows图标结构。这将

    在X上,图像被排列到\u NET \u WM \u ICON X属性中,该属性 大多数现代窗口管理器都支持。可能存在wm iconbitmap

    在Macintosh上,第一个名为的图像加载到OSX本机图标中 格式,并成为对话框、驳接和 在参数中传递的第一个图像作为对多个 macOS上的大小/分辨率超出Tk的范围。开发商应该 使用他们能支持的最大图标(最好是512像素)来 确保在Mac上平滑渲染。

    我在windows上做了测试,以确保它至少在那里工作。我用一个蓝色的正方形图像来测试。

    如果上述文件是准确的,它也应该在MAC上工作。

    enter image description here

        2
  •  3
  •   Manuel Felipe Garcia Rincon    7 年前

    如果您使用的是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()
    
    
        3
  •  1
  •   Eb946207 mourshad    7 年前

    重要提示:
    不管怎样,继续。。。。

    你可以使用py2app。

    Py2app .app ,意味着它作为应用程序运行(因为它是)。使用时 tkinter 这通常是您最终想要的,因为gui通常被转换成应用程序以便于使用。您可以阅读py2app文档 here ,或阅读一个非官方但更容易理解的(在我看来)教程 here . 我也会总结一下怎么做的过程。

    py2app :

    sudo pip install -U 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'],
    )
    

    第三步:

    python setup.py py2app -A
    

    这个 -A 使应用程序对代码中的更新作出响应,但使应用程序不可擦除。完成开发后,重新运行命令,这次不使用 -A

    python setup.py py2app
    

    注意:您可能需要使用以下命令 python3 setup.py py2... python setup.py py2... 对于python3py2app。

    第四步: 引导到 the dictionary your code is in/dist dist 当您运行命令时,应该在第三步中创建文件夹)

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