在我的脚本中,我使用tkinterdnd2
库来实现从Windows资源管理器到我的tkinter UI的拖放功能。
from tkinterdnd2 import TkinterDnD, DND_FILES
import tkinter as tk
class TkWindow:
def __init__(self):
self.window = TkinterDnD.Tk()
self.tbox = tk.Listbox(self.window)
self.tbox.pack(fill=tk.BOTH)
self.tbox.drop_target_register(DND_FILES)
self.tbox.dnd_bind('<<Drop>>', self.tk_files_dropped)
self.window.mainloop()
def tk_files_dropped(self, event):
messagebox.showinfo("x", event.data)
TkWindow()
当我启动脚本时-一切正常。
但是当我用PyInstaller将项目冻结为一个EXE文件并运行它时,我得到了这个错误:
我已经尝试过这些解决方案:
1.我按照tkinterdnd2
资源库中的说明添加了pyinstaller-hook:from PyInstaller.utils.hooks import collect_data_files, eval_statement
datas = collect_data_files('tkinterdnd2')
1.我在执行构建命令时添加了--collect-all tkinterdnd2
。
1.我尝试将tkdnd2.8
复制到tcl8.6
,如this answer中所述
1.我试着去掉venv,把所有的包直接安装到basepython解释器中。
2条答案
按热度按时间mzsu5hc01#
我使用了大写的
--collect-all TkinterDnD2
。myss37ts2#
要将Python文件转换为exe,请运行
pyinstaller.exe --collect-all TkinterDnD2 --windowed yor_app.py
。这将创建所创建程序的文件和文件夹。您将找到名为TCL的文件。将tkdnd文件夹复制到该文件夹中,然后运行exe文件