Python TkDnD错误:无法加载TkDnD库(_tkinter.TclError:can';t查找不到包TkDnD)
我目前正在使用Python 3.8和Tcl/Tk 8.6开发MacOs Catalina 10.15.6。正如中所建议的,我没有从中加载Tk扩展tkdnd2.8,也没有从中加载Python包装器TkinterDnD2,然后我将tkdnd2.8目录复制到/Library/Tcl,将TkinterDnD2目录复制到/Library/Frameworks/Python.framework/Versions/../lib/Python/site packages 之后,当尝试执行以下简单代码时:Python TkDnD错误:无法加载TkDnD库(_tkinter.TclError:can';t查找不到包TkDnD),python,python-3.x,macos,tkinter,Python,Python 3.x,Macos,Tkinter,我目前正在使用Python 3.8和Tcl/Tk 8.6开发MacOs Catalina 10.15.6。正如中所建议的,我没有从中加载Tk扩展tkdnd2.8,也没有从中加载Python包装器TkinterDnD2,然后我将tkdnd2.8目录复制到/Library/Tcl,将TkinterDnD2目录复制到/Library/Frameworks/Python.framework/Versions/../lib/Python/site packages 之后,当尝试执行以下简单代码时: fro
from TkinterDnD2 import *
import tkinter as tk
root = TkinterDnD.Tk()
它给了我一个错误:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/TkinterDnD2/TkinterDnD.py", line 39, in _require
TkdndVersion = tkroot.tk.call('package', 'require', 'tkdnd')
_tkinter.TclError: can't find package tkdnd
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/Administrador/Desktop/tkdnd_test.py", line 3, in <module>
root = TkinterDnD.Tk()
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/TkinterDnD2/TkinterDnD.py", line 271, in __init__
self.TkdndVersion = _require(self)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/TkinterDnD2/TkinterDnD.py", line 41, in _require
raise RuntimeError('Unable to load tkdnd library.')
RuntimeError: Unable to load tkdnd library.
显示相同的错误(在此之前,打印tkdnd路径):
无
/用户/管理员/桌面/tkdnd2.8
回溯(最近一次呼叫最后一次):
文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site packages/TkinterDnD2/TkinterDnD.py”,第39行,在
TkdndVersion=tkroot.tk.call('package','require','tkdnd')
_tkinter.TclError:找不到包tkdnd
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/Users/Administrador/Desktop/tkdnd_test.py”,第11行,在
root=TkinterDnD.Tk()
文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site packages/TkinterDnD2/TkinterDnD.py”,第271行,在__
self.TkdndVersion=_require(self)
文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site packages/TkinterDnD2/TkinterDnD.py”,第41行,在
引发运行时错误('无法加载tkdnd库')
运行时错误:无法加载tkdnd库。
我觉得我在这里遗漏了一些东西,但我花了很多时间寻找类似的经历,却没有找到解决办法。任何帮助都将不胜感激。已解决!您应该放置tkdnd库的文件夹是/library/Frameworks/Python.framework/Versions/../lib/。将lib放在/Library/Tcl上对Catalina不起作用。我建议您安装可用的最新tkdnd版本(当前为2.9.3)。您可能有一个32位库试图加载到64位python中。检查这两种体系结构。@patthoyts我也这么认为,但当我运行
文件libtkdnd2.8.dylib
时,输出是:libtkdnd2.8.dylib:Mach-O通用二进制,具有两种体系结构:[x86_64:Mach-O 64位动态链接共享库x86_64][i386:Mach-O动态链接共享库i386]
。当我运行python-c'import sys时;打印(“%x”%sys.maxsize,sys.maxsize>2**32)
输出是('7fffffffffffff',True)
,因此我认为它们都是64位的。我还注意到,当我在OS Mojave中运行代码时,它工作正常,我只在OS Catalina中得到错误。
from TkinterDnD2 import *
import tkinter as tk
import sys, os
print(os.environ.get('TKDND_LIBRARY'))
application_path = os.path.dirname(os.path.abspath(__file__))
TK_DND_PATH = os.path.join(application_path,'tkdnd2.8')
os.environ['TKDND_LIBRARY'] = TK_DND_PATH
print(os.environ.get('TKDND_LIBRARY'))
root = TkinterDnD.Tk()
None
/Users/Administrador/Desktop/tkdnd2.8
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/TkinterDnD2/TkinterDnD.py", line 39, in _require
TkdndVersion = tkroot.tk.call('package', 'require', 'tkdnd')
_tkinter.TclError: can't find package tkdnd
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/Administrador/Desktop/tkdnd_test.py", line 11, in <module>
root = TkinterDnD.Tk()
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/TkinterDnD2/TkinterDnD.py", line 271, in __init__
self.TkdndVersion = _require(self)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/TkinterDnD2/TkinterDnD.py", line 41, in _require
raise RuntimeError('Unable to load tkdnd library.')
RuntimeError: Unable to load tkdnd library.