This was reported here in February, but no debugging information was provided by the reporter: http://stackoverflow.com/questions/9142786/python-imagetk-photoimage-segfault <view-source:http://stackoverflow.com/questions/9142786/python-imagetk-photoimage-segfault>
I can explain the nature of the problem, but I don't know how to fix it correctly. I am using the standard x86_64 Python 2.7.2 package from python.org and I have installed Active State Tcl/Tk 8.11. When I tried using easy_install to install PIL it would not load, claiming that _imaging.so did not exist. In fact, it existed but was only a thin i386 executable. So I compiled Imaging-1.1.7 with export CFLAGS='-arch i386 -arch x86_64' and export TCL_ROOT=/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl I was then able to load the module. However, the following code produced a segfault: import Image import ImageTk import Tkinter W = Tkinter.Tk() Im = Image.open('test_image.jpg') x = ImageTk.PhotoImage(Im) The crash occurs in Tk_GetImageMasterData. More importantly, though, the crash was preceded by the following messages: objc[36554]: Class TKApplication is implemented in both /Library/Frameworks/Tk.framework/Versions/8.5/Tk and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined. objc[36554]: Class TKMenu is implemented in both /Library/Frameworks/Tk.framework/Versions/8.5/Tk and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined. objc[36554]: Class TKContentView is implemented in both /Library/Frameworks/Tk.framework/Versions/8.5/Tk and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined. objc[36554]: Class TKWindow is implemented in both /Library/Frameworks/Tk.framework/Versions/8.5/Tk and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined. Guessing that PIL was finding the System/Library/Frameworks/Tk.Framework instead of /Library/Frameworks/Tk.Framework, I tried hiding the system Tcl and Tk frameworks by renaming them. I was then able to create the PhotoImage and display it. I don't know where those messages come from, and I have never encountered them before. But I am guessing they are from OS X, since they are generated by an objective C program. Evidently _tkinter.so is able to specify which Tk.Framework to use. I don't know its mechanism for doing that. But, somehow, PIL is not doing it, and it ends up using the wrong one. A stack trace of the crash is below. - Marc 0x000000011517bccd in Tk_GetImageMasterData () (gdb) bt #0 0x000000011517bccd in Tk_GetImageMasterData () #1 0x0000000115183d9f in Tk_FindPhoto () #2 0x00000001014fbadc in PyImagingPhotoPut () #3 0x000000011502a05b in TclInvokeStringCommand () #4 0x000000010102142a in TclEvalObjvInternal () #5 0x000000010102261c in Tcl_EvalObjv () #6 0x000000010100646d in Tkapp_Call () #7 0x00000001000c102d in PyEval_EvalFrameEx () #8 0x00000001000c2d29 in PyEval_EvalCodeEx () #9 0x00000001000c0b6a in PyEval_EvalFrameEx () #10 0x00000001000c2d29 in PyEval_EvalCodeEx () #11 0x000000010003da80 in function_call () #12 0x000000010000c5e2 in PyObject_Call () #13 0x000000010001ebcb in instancemethod_call () #14 0x000000010000c5e2 in PyObject_Call () #15 0x00000001000ba5f7 in PyEval_CallObjectWithKeywords () #16 0x0000000100021e5e in PyInstance_New () #17 0x000000010000c5e2 in PyObject_Call () #18 0x00000001000be5f3 in PyEval_EvalFrameEx () #19 0x00000001000c2d29 in PyEval_EvalCodeEx () #20 0x00000001000c2e46 in PyEval_EvalCode () #21 0x00000001000e769c in PyRun_InteractiveOneFlags () #22 0x00000001000e78fe in PyRun_InteractiveLoopFlags () #23 0x00000001000e80e1 in PyRun_AnyFileExFlags () #24 0x00000001000fe77c in Py_Main () #25 0x0000000100000f14 in dyld_stub_strlen ()
_______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org http://mail.python.org/mailman/listinfo/tkinter-discuss