我有一个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上运行?
答案 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。