python - 如何在 tkinter 应用程序中打包和使用图标?
问题描述
我尝试在tkinter
. 安装后我无法显示应用程序图标。我应该改变什么才能使它成为可能?这是我的包目录树:
gui_app/
| gui_app/
| __init__.py
| __main__.py
| img/
| icon.gif
| setup.py
setup.py
包含:
from setuptools import setup
from gui_app import __version__
setup(
name='gui_app',
version=__version__,
packages=['gui_app'],
data_files=[('', ['img/icon.gif'])],
entry_points={'gui_scripts': ['gui_app = gui_app.__main__:main'],},
)
为了加载我的图标,我尝试了这里描述的不同方法:pkgutil, importlib.resources。不幸的是,他们都没有为我工作。我可能做错了什么。这是我最终得到的代码:
import tkinter as tk
from importlib.abc import ResourceReader as res
def get_path_before_install():
return 'img/icon.gif'
def get_path_after_install():
return res.resource_path('.', 'icon.gif')
def display_gui():
root = tk.Tk()
icon_path = get_path_after_install()
icon = tk.PhotoImage(file=str(icon_path))
root.iconphoto(False, icon)
root.mainloop()
def main():
display_gui()
if __name__ == '__main__': main()
当我使用$ pip install .
然后$ gui_app
它产生FileNotFoundError
. 安装后如何更正它以显示图标?
解决方案
首先:package_data
是位于 Python 包中的数据。因此,请确保包含该文件的目录是一个实际的 Python 包(您可能希望在__init__.py
其中添加一个文件),并确保该包已正确添加到您的发行版(sdist和bdist)。
因此,对于您的情况,以下建议可能会有所帮助:
- 将图像移动到
gui_app/img/icon.gif
- 添加
gui_app/img/__init__.py
(您可能会看到建议说没有必要,如果您真正理解该建议及其含义,请随时遵循它) - 添加
gui_app.img
到用作函数调用中参数的packages
参数的列表setuptools.setup
- 相应地调整代码
推荐阅读
- html - 如何创建具有线性渐变的动画圆形进度条?
- node.js - Faunadb:从子数据库创建文档到集合
- java - 如何使用 Java 发送 SOAP 请求?
- java - 使用ComponentScan其他包部署spring boot war文件到tomcat
- excel - 过滤行一起引用列中的值
- svelte - 为什么我不能在此 Svelte 应用程序的组件中保留与组件相关的操作?
- fortran - fortran中幂函数的效率
- html - 如何在表上使用引导表类 .table-hover 和 .table-striped
- angular - 如何过滤日期mm / dd / yyyy从带有primeng的角度10中的文本输入中传递任何数字
- c# - 如何在 dotnetcore c# 中为 opentk 创建 openGL 上下文