在Windows中的Kivy窗口上的错误图标

时间:2018-03-16 03:34:31

标签: python python-3.x kivy

我有一个Kivy应用程序,否则工作正常。在我的App课程中,我有以下内容......

class OmissionApp(App):
    """
   Application-level class, builds the application
   """

    def __init__(self, **kwargs):
        """
        Initialize a new OmissionWindow.
        """
        super().__init__(**kwargs)
        # Some other init stuff

    def build_config(self, config):
        """
       Configure the application.
       """

        # Icon
        Config.set('kivy', 'window_icon', 'resources/icons/omission_icon.png')
        # And more stuff...

    def build(self):
        """
        This function starts the application by constructing
        it from widgets and properties.
        """

        # Set the title and icon.
        self.title = "Omission"
        self.icon = "resources/icons/omission_icon.png"

        # Create the window.
        omission_app = OmissionWindow()

        # And more...

        # Return the application.
        return omission_app

因此,这在Ubuntu(16.04,17.10)上运行很好,但在Microsoft Windows(7)上,它根本没有显示图标。

我的文件树看起来大致如此(我留下了一些不相干的东西)......

.
├── omission/
│   ├── data/
│   ├── game/
│   ├── interface/
│   ├── resources/
│   │   ├── audio/
│   │   ├── content/
│   │   ├── font/
│   │   └── icons/
│   │       ├── omission_icon.ico
│   │       └── omission_icon.png
│   ├── __init__.py
│   ├── __main__.py
│   └── run.py
└── omission.spec

我尝试了几种方法(虽然documentation表示代码本身是正确的。)另外,它也适用于Ubuntu。我尝试使用*.ico图标文件而不是*.png,但没有运气。

如何让图标在Microsoft Windows上运行?

1 个答案:

答案 0 :(得分:0)

文档中给出的示例有效,因为它只是一个文件名 - 实际的图标文件与应用程序位于同一文件夹中。

将图标移动到应用程序根目录,然后将代码更改为以下内容, 可以在任何系统上运行。

self.icon = "omission_icon.png"

但是,因为我在子目录中有我的图标,所以现在我正在处理文件路径。很容易忘记UNIX和Windows上的路径不一样。简单地说,硬编码路径不可移植。

因此,我需要通过os.path创建一个可移植的系统路径来解决这个问题。

import os.path
# ...
Config.set('kivy', 'window_icon', os.path.join("omission", "resources", "icons", "omission_icon.png"))
# ...
self.icon = os.path.join("omission", "resources", "icons", "omission_icon.png")

默认情况下,os.path从当前目录开始。在这种情况下,恰好是应用程序目录的父目录。

  

注意:从技术上讲,您可以关闭"omission"目录,但在使用PyInstaller打包后它将无法运行。上述方式无论如何都适用。

现在我们的图标适用于任何系统!

  

注意:是的,我知道这可能看起来很明亮 - 但是我在发现之前已经走了很长时间,显然它似乎值得Q& A。