python PyInstaller + tkdnd/tkinterdnd 2启动冻结的exe时“无法加载tkdnd库”,从脚本启动时工作

wwtsj6pe  于 2023-01-19  发布在  Python
关注(0)|答案(2)|浏览(356)

在我的脚本中,我使用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解释器中。

mzsu5hc0

mzsu5hc01#

我使用了大写的--collect-all TkinterDnD2

myss37ts

myss37ts2#

要将Python文件转换为exe,请运行pyinstaller.exe --collect-all TkinterDnD2 --windowed yor_app.py。这将创建所创建程序的文件和文件夹。您将找到名为TCL的文件。将tkdnd文件夹复制到该文件夹中,然后运行exe文件

相关问题