Bug summary
Python with the 'TkAgg' backend crashes out when figure windows are moved around between multiple monitors.
How to reproduce
Create a few figures e.g.:
from matplotlib import pyplot as plt
import numpy as np
def foo():
plt.figure()
plt.plot(np.random.randn(1000), np.random.randn(1000), 'k.')
for n in range(4):
foo()
plt.show()
Move the figures between windows, rearrange them, swap between desktops, perhaps close the windows and rerun the script and repeat. There is a very high probability that Python will crash.
Actual outcome
IPython crashes with
2017-01-04 13:01:00.136 python[13315:466208] *** Assertion failure in -[_NSCGSWindow setFrame:], /Library/Caches/com.apple.xbs/Sources/AppKit/AppKit-1504.76/CGS.subproj/NSCGSWindow.m:663
2017-01-04 13:01:00.141 python[13315:466208] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: CGRectContainsRect(CGRectMake((CGFloat)INT_MIN, (CGFloat)INT_MIN, (CGFloat)INT_MAX - (CGFloat)INT_MIN, (CGFloat)INT_MAX - (CGFloat)INT_MIN), frame)'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff89111e7b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x00007fff9dceccad objc_exception_throw + 48
2 CoreFoundation 0x00007fff89116b82 +[NSException raise:format:arguments:] + 98
3 Foundation 0x00007fff8ab60d50 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
4 AppKit 0x00007fff86d2f519 -[_NSCGSWindow setFrame:] + 252
5 AppKit 0x00007fff86dac644 _NXCreateWindowWithStyleMask + 157
6 AppKit 0x00007fff86dac4c2 _NSCreateWindow + 184
7 AppKit 0x00007fff86df5fe4 -[NSWindow _commonAwake] + 1465
8 AppKit 0x00007fff874a92d6 -[NSWindow _resolveAutomaticEnterFullScreenFlags] + 51
9 AppKit 0x00007fff86df58cf -[NSWindow makeKeyAndOrderFront:] + 31
10 Tk 0x0000000106761487 XMapWindow + 164
11 Tk 0x00000001066d2c9d Tk_MapWindow + 178
12 Tk 0x00000001066db3c5 TkInstallFrameMenu + 271
13 Tcl 0x000000010664ea57 TclServiceIdle + 77
14 Tcl 0x0000000106635619 Tcl_DoOneEvent + 350
15 _tkinter.so 0x00000001065ab48d _tkinter_tkapp_mainloop + 445
16 libpython3.5m.dylib 0x000000010004ff38 PyCFunction_Call + 280
17 libpython3.5m.dylib 0x00000001000bd2df PyEval_EvalFrameEx + 22431
18 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
19 libpython3.5m.dylib 0x00000001000c19ae fast_function + 334
20 libpython3.5m.dylib 0x00000001000bd434 PyEval_EvalFrameEx + 22772
21 libpython3.5m.dylib 0x00000001000c192f fast_function + 207
22 libpython3.5m.dylib 0x00000001000bd434 PyEval_EvalFrameEx + 22772
23 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
24 libpython3.5m.dylib 0x00000001000b7b1e PyEval_EvalCodeEx + 78
25 libpython3.5m.dylib 0x000000010003430f function_call + 351
26 libpython3.5m.dylib 0x000000010000fd73 PyObject_Call + 99
27 libpython3.5m.dylib 0x000000010002130d method_call + 141
28 libpython3.5m.dylib 0x000000010000fd73 PyObject_Call + 99
29 libpython3.5m.dylib 0x0000000100064c55 slot_tp_call + 117
30 libpython3.5m.dylib 0x000000010000fd73 PyObject_Call + 99
31 libpython3.5m.dylib 0x00000001000bdec8 PyEval_EvalFrameEx + 25480
32 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
33 libpython3.5m.dylib 0x00000001000c19ae fast_function + 334
34 libpython3.5m.dylib 0x00000001000bd434 PyEval_EvalFrameEx + 22772
35 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
36 libpython3.5m.dylib 0x00000001000b7ac1 PyEval_EvalCode + 81
37 libpython3.5m.dylib 0x00000001000b52ab builtin_exec + 555
38 libpython3.5m.dylib 0x000000010004ff38 PyCFunction_Call + 280
39 libpython3.5m.dylib 0x00000001000bd2df PyEval_EvalFrameEx + 22431
40 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
41 libpython3.5m.dylib 0x00000001000c19ae fast_function + 334
42 libpython3.5m.dylib 0x00000001000bd434 PyEval_EvalFrameEx + 22772
43 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
44 libpython3.5m.dylib 0x00000001000c19ae fast_function + 334
45 libpython3.5m.dylib 0x00000001000bd434 PyEval_EvalFrameEx + 22772
46 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
47 libpython3.5m.dylib 0x00000001000c19ae fast_function + 334
48 libpython3.5m.dylib 0x00000001000bd434 PyEval_EvalFrameEx + 22772
49 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
50 libpython3.5m.dylib 0x00000001000c19ae fast_function + 334
51 libpython3.5m.dylib 0x00000001000bd434 PyEval_EvalFrameEx + 22772
52 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
53 libpython3.5m.dylib 0x00000001000c19ae fast_function + 334
54 libpython3.5m.dylib 0x00000001000bd434 PyEval_EvalFrameEx + 22772
55 libpython3.5m.dylib 0x00000001000c192f fast_function + 207
56 libpython3.5m.dylib 0x00000001000bd434 PyEval_EvalFrameEx + 22772
57 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
58 libpython3.5m.dylib 0x00000001000b7b1e PyEval_EvalCodeEx + 78
59 libpython3.5m.dylib 0x000000010003430f function_call + 351
60 libpython3.5m.dylib 0x000000010000fd73 PyObject_Call + 99
61 libpython3.5m.dylib 0x00000001000bdec8 PyEval_EvalFrameEx + 25480
62 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
63 libpython3.5m.dylib 0x00000001000c19ae fast_function + 334
64 libpython3.5m.dylib 0x00000001000bd434 PyEval_EvalFrameEx + 22772
65 libpython3.5m.dylib 0x00000001000c10c3 _PyEval_EvalCodeWithName + 1779
66 libpython3.5m.dylib 0x00000001000b7ac1 PyEval_EvalCode + 81
67 libpython3.5m.dylib 0x00000001000e6937 PyRun_FileExFlags + 215
68 libpython3.5m.dylib 0x00000001000e60ea PyRun_SimpleFileExFlags + 842
69 libpython3.5m.dylib 0x00000001000fcc5b Py_Main + 3355
70 python 0x0000000100000dc7 main + 215
71 python 0x0000000100000ce4 start + 52
72 ??? 0x0000000000000002 0x0 + 2
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Abort trap: 6
This is the most common form of stack trace, though more terse errors, such as
called Tcl_FindHashEntry on deleted table
Abort trap: 6
may be encountered.
Expected outcome
This kind of crash should not occur when we simply move windows from one monitor to the other.
Matplotlib version
- matplotlib.version = 1.5.3 (installed via miniconda)
- matplotlib.get_backend() == 'TkAgg'
- Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul 2 2016, 17:52:12)
- IPython 5.1.0
- Darwin MacBook-Pro.local 16.3.0 Darwin Kernel Version 16.3.0: Thu Nov 17 20:23:58 PST 2016; root:xnu-3789.31.2~1/RELEASE_X86_64 x86_64
Bug summary
Python with the 'TkAgg' backend crashes out when figure windows are moved around between multiple monitors.
How to reproduce
Create a few figures e.g.:
Move the figures between windows, rearrange them, swap between desktops, perhaps close the windows and rerun the script and repeat. There is a very high probability that Python will crash.
Actual outcome
IPython crashes with
This is the most common form of stack trace, though more terse errors, such as
may be encountered.
Expected outcome
This kind of crash should not occur when we simply move windows from one monitor to the other.
Matplotlib version