import tkinter as tk
class Application(tk.Tk):
def __init__(self, title:str="Simple", x:int=0, y:int=0, **kwargs):
tk.Tk.__init__(self)
self.title(title)
self.config(**kwargs)
self.iconbitmap('icon.ico')
self.first_row_frame=tk.Frame(self)
self.first_row_frame.grid(column=0,row=0,sticky='W')
self.lbl_ser_num=tk.Label(self.first_row_frame,text="Sr No:",font='Arial 50 bold')
self.lbl_ser_num.grid(column=0,row=0)
self.update_idletasks()
self.state('zoomed')
if __name__ == "__main__":
# height of 0 defaults to screenheight, else use height
Application(title="simple app").mainloop()
正如你所看到的,我使用了 icon.ico 作为图标(我无法在这篇文章中上传该文件,你可以从 https://raw.githubusercontent.com/shanet/Cryptully/refs/heads/master/src/ 获取一个)图片/icon.ico)。
我使用命令将其制成可执行文件
pyinstaller --onefile -i "icon.ico" my-script.py
这将创建一个包含 my-script.exe 的 dist 文件夹
如果我运行 my-script.exe 那么我会收到以下错误
Traceback (most recent call last):
File "full-path-to-my-script.py", line 17, in <module>
Application(title="simple app").mainloop()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "full-path-to-my-script.py", line 7, in __init__
self.iconbitmap('icon.ico')
File "tkinter\__init__.py", line 2155, in wm_iconbitmap
_tkinter.TclError: bitmap "icon.ico" not defined
[PYI-2628:ERROR] Failed to execute script 'my-script' due to unhandled exception!
如果我将 icon.ico 复制到此 dist 文件夹中,则可执行文件将按预期工作。(图标出现在窗口标题栏和任务栏中)
我的目标是有一个exe文件来运行脚本。我在这里做错了什么?
如果需要任何其他详细信息,请告诉我。
谢谢。
PS:我注意到 Windows 资源管理器文件管理器中出现了图标,这没关系,但当我运行 exe 文件时,我的目标是任务栏中的大图标。
acw1668 告诉阅读 https://pyinstaller.org/en/stable/runtime-information.html
使用它,我将 tkinter 代码更改为以下
import tkinter as tk
import sys
from os import path
class Application(tk.Tk):
def __init__(self, title:str="Simple", x:int=0, y:int=0, **kwargs):
tk.Tk.__init__(self)
self.title(title)
self.config(**kwargs)
#
if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
print('running in a PyInstaller bundle')
else:
print('running in a normal Python process')
self.first_row_frame=tk.Frame(self)
path_to_dat = path.abspath(path.join(path.dirname(__file__),'icofolder'))
print(path_to_dat)
self.iconbitmap(path_to_dat+'\\icon.ico')
self.first_row_frame.grid(column=0,row=0,sticky='W')
self.lbl_ser_num=tk.Label(self.first_row_frame,text="Sr No:",font='Arial 50 bold')
self.lbl_ser_num.grid(column=0,row=0)
self.update_idletasks()
self.state('zoomed')
if __name__ == "__main__":
# height of 0 defaults to screenheight, else use height
Application(title="simple app").mainloop()
然后我使用以下命令创建了exe
pyinstaller --clean --onefile -i "icon.ico" --add-data "icon.ico;icofolder" my-script.py
然后你只需从任何地方运行 dist 文件夹的 exe 文件即可。
如果这里有什么不需要的,请告诉我。
谢谢。