Mic*_*ael 11 python tkinter python-imaging-library python-2.7 anaconda
我正在测试使用Tkinter模块创建GUI.我试图使用PIL将图像添加到GUI.我的代码看起来像这样:
import Tkinter as tk
from PIL import Image, ImageTk
root = tk.Tk()
root.title('background image')
imfile = "foo.png"
im = Image.open(imfile)
im1 = ImageTk.PhotoImage(im)
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我想出了一些导致段错误的错误.
objc[5431]: Class TKApplication is implemented in both/Users/sykeoh/anaconda/lib/libtk8.5.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
objc[5431]: Class TKMenu is implemented in both /Users/sykeoh/anaconda/lib/libtk8.5.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
objc[5431]: Class TKContentView is implemented in both /Users/sykeoh/anaconda/lib/libtk8.5.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
objc[5431]: Class TKWindow is implemented in both /Users/sykeoh/anaconda/lib/libtk8.5.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
Segmentation fault: 11
Run Code Online (Sandbox Code Playgroud)
我已经在线查看,它看起来是我的系统库中的Tk框架和anaconda库中的另一个问题.但是,这些解决方案似乎都没有起作用.任何可能的解决方案或解决方法?
运行ImageTk.Photoimage会出现问题.如果我删除该行代码,则没有问题.
我知道我创造了赏金,但我不耐烦,决定调查,现在我有一些对我有用的东西.我有一个非常类似的python示例,除了尝试使用Tkinter显示在命令行上传递的图像之外,它几乎没有任何其他功能,如下所示:
calebhattingh $ python imageview.py a.jpg
objc[84696]: Class TKApplication is implemented in both /Users/calebhattingh/anaconda/envs/py35/lib/libtk8.5.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
objc[84696]: Class TKMenu is implemented in both /Users/calebhattingh/anaconda/envs/py35/lib/libtk8.5.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
objc[84696]: Class TKContentView is implemented in both /Users/calebhattingh/anaconda/envs/py35/lib/libtk8.5.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
objc[84696]: Class TKWindow is implemented in both /Users/calebhattingh/anaconda/envs/py35/lib/libtk8.5.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
Segmentation fault: 11
Run Code Online (Sandbox Code Playgroud)
发生的事情是二进制文件~/anaconda/envs/py35/lib/python3.5/site-packages/PIL/_imagingtk.so已链接到框架,而不是env中的Tcl/Tk库.您可以通过使用otool查看链接设置来查看此内容:
(py35) ~/anaconda/envs/py35/lib/python3.5/site-packages/PIL
calebhattingh $ otool -L _imagingtk.so
_imagingtk.so:
/System/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl (compatibility version 8.5.0, current version 8.5.9)
/System/Library/Frameworks/Tk.framework/Versions/8.5/Tk (compatibility version 8.5.0, current version 8.5.9)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
Run Code Online (Sandbox Code Playgroud)
看到那两个"框架"线?有了anaconda,我们不希望这样.我们想在env中使用这些库.所以让我们改变它们吧!
首先备份二进制文件(如果你想恢复):
$ cp _imagingtk.so _imagingtk.so.bak
Run Code Online (Sandbox Code Playgroud)
现在在命令行上运行它(假设您与您的文件夹在同一个文件夹中envname/lib):
$ install_name_tool -change "/System/Library/Frameworks/Tk.framework/Versions/8.5/Tk" "@rpath/libtk8.5.dylib" _imagingtk.so
$ install_name_tool -change "/System/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl" "@rpath/libtcl8.5.dylib" _imagingtk.so
Run Code Online (Sandbox Code Playgroud)
你@rpath在那里看到那一点?这意味着你在路上找到的那个.这适用于anaconda._imagingtk.so库中的链接现在看起来像这样:
(py35) ~/anaconda/envs/py35/lib/python3.5/site-packages/PIL
calebhattingh $ otool -L _imagingtk.so
_imagingtk.so:
@rpath/libtcl8.5.dylib (compatibility version 8.5.0, current version 8.5.9)
@rpath/libtk8.5.dylib (compatibility version 8.5.0, current version 8.5.9)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
Run Code Online (Sandbox Code Playgroud)
在此之后,您的代码将运行.有人应该尝试将其上游.
附录:python发行版中的Tkinter绑定,即当前活动的conda env,具有以下链接:
~/anaconda/envs/py35/lib/python3.5/lib-dynload
calebhattingh $ otool -L _tkinter.cpython-35m-darwin.so
_tkinter.cpython-35m-darwin.so:
@loader_path/../../libtcl8.5.dylib (compatibility version 8.5.0, current version 8.5.18)
@loader_path/../../libtk8.5.dylib (compatibility version 8.5.0, current version 8.5.18)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)
Run Code Online (Sandbox Code Playgroud)
如果您愿意,您可以install_name_tool使用@loader_path/../../而不是使用我上面使用的,即@rpath/.这可能也会奏效,甚至可能更好.
| 归档时间: |
|
| 查看次数: |
3149 次 |
| 最近记录: |