Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TkDnD错误:无法加载TkDnD库(_tkinter.TclError:can';t查找不到包TkDnD)_Python_Python 3.x_Macos_Tkinter - Fatal编程技术网

Python TkDnD错误:无法加载TkDnD库(_tkinter.TclError:can';t查找不到包TkDnD)

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

我目前正在使用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

之后,当尝试执行以下简单代码时:

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.