【问题标题】:PyInstaller + tkdnd/tkinterdnd2 "Unable to load tkdnd library" when launching frozen exe. Works when launched from scriptPyInstaller + tkdnd/tkinterdnd2 启动冻结的 exe 时“无法加载 tkdnd 库”。从脚本启动时工作
【发布时间】:2021-11-19 17:15:00
【问题描述】:

在我的脚本中,我使用 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 as instructed

    from PyInstaller.utils.hooks import collect_data_files, eval_statement
    datas = collect_data_files('tkinterdnd2')

  2. 我在执行构建命令时添加--collect-all tkinterdnd2

  3. 我尝试将tkdnd2.8 复制到tcl8.6,如this answer 中所述

  4. 我尝试摆脱 venv 并将所有软件包直接安装到基本 python 解释器中。

【问题讨论】:

  • 当我遇到 pyinstaller 问题时,我尝试了不同的方法,但直到我在命令提示符下运行 pip uninstall 并且它工作正常后才奏效。
  • @CEO 你的意思是卸载和安装pyinstaller吗?也试过了。
  • 并非如此。那就让我写在答案部分吧
  • 您的代码在代码编辑器中运行是否没有任何错误?
  • 是的。没有任何错误。完整的回购在这里:github.com/deshudiosh/PyWykladzinyLayout

标签: python tkinter pyinstaller


【解决方案1】:

我将--collect-all TkinterDnD2 与大写字母一起使用。

【讨论】:

  • 我已经切换到 wxpython 但我很高兴你回答。接缝,这可能是原因。
猜你喜欢
  • 2020-12-19
  • 1970-01-01
  • 2016-03-25
  • 2018-03-30
  • 2011-04-09
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
相关资源
最近更新 更多