我正在使用Tkinter编写一个程序,该程序最终将使用py2exe编译为exe。我想在窗口中包含一个图标。它将与我作为exe的图标打包相同。有没有办法在Tkinter中包含图标,通过查找exe文件或使用类似文件的对象?我知道win32api可以找到正在运行的当前exe文件,但是我相信py2exe将原始文件提取到temp,然后运行它,因此无法找到原始exe文件。我还想把它放在一个包含文件夹中,但我不知道是否可以正确设置cwd。感谢您的帮助!
答案 0 :(得分:3)
Tk图片有-data
选项,可让您将图片嵌入代码中。你只需要对图像进行base64编码。我认为图像最初必须采用GIF格式。
这是一个有效的例子:
import Tkinter as tk
root = tk.Tk()
data = '''R0lGODlhIAAgALMAAAAAAAAAgHCAkC6LV76+vvXeswD/ANzc3DLNMubm+v/6zS9P
T6Ai8P8A/////////yH5BAEAAAkALAAAAAAgACAAAAS00MlJq7046803AF3ofAYY
fh8GIEvpoUZcmtOKAO5rLMva0rYVKqX5IEq3XDAZo1GGiOhw5rtJc09cVGo7orYw
YtYo3d4+DBxJWuSCAQ30+vNTGcxnOIARj3eTYhJDQ3woDGl7foNiKBV7aYeEkHEi
gnKFkk4ciYaImJqbkZ+PjZUjaJOElKanqJyRrJyZgSKkokOsNYa2q7mcirC5I5Fo
fsK6hcHHgsSgx4a9yzXK0rrV19gRADs=
'''
img = tk.PhotoImage(data=data)
label = tk.Label(image=img)
label.pack()
root.mainloop()
答案 1 :(得分:2)
您可以使用icon_resources
选项
setup(windows=[
{'script':'toto.py', "icon_resources": [(1, "toto.ico")]},
],
然后你可以使用windows api
检索它import win32gui, win32api, win32con
from ctypes import c_int, windll
hicon = win32gui.CreateIconFromResource(win32api.LoadResource(None, win32con.RT_ICON, 13), True)
然后只要你知道他的HWND就会附加到一个窗口。
windll.user32.SendMessageA(c_int(hwnd), c_int(win32con.WM_SETICON), c_int(win32con.ICON_SMALL), c_int(hicon))
使用ResourceHacker等工具检索13
中使用的LoadResource
常量。在ResourceHacker中,它对应于图标的文件夹名称。我不知道py2exe是如何计算的,如果有办法强制这个值。
我也不知道是否有纯粹的TkInter方法,如果图标可以在tkinter窗口中原样使用。
我希望它有所帮助