对Tk()使用类似文件的对象。iconbitmap()

时间:2010-11-18 02:17:08

标签: python tkinter py2exe

我正在使用Tkinter编写一个程序,该程序最终将使用py2exe编译为exe。我想在窗口中包含一个图标。它将与我作为exe的图标打包相同。有没有办法在Tkinter中包含图标,通过查找exe文件或使用类似文件的对象?我知道win32api可以找到正在运行的当前exe文件,但是我相信py2exe将原始文件提取到temp,然后运行它,因此无法找到原始exe文件。我还想把它放在一个包含文件夹中,但我不知道是否可以正确设置cwd。感谢您的帮助!

2 个答案:

答案 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选项

在py2exe二进制文件中嵌入图标
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窗口中原样使用。

我希望它有所帮助

相关问题