Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b4e2b8a

Browse files
committed
simple plot works
1 parent 39694f2 commit b4e2b8a

2 files changed

Lines changed: 103 additions & 20 deletions

File tree

lib/matplotlib/backends/_tkagg.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
from __future__ import (absolute_import, division, print_function,
2+
unicode_literals)
3+
from _tkinter.tklib_cffi import ffi as tkffi, lib as tklib
4+
from _tkinter.tclobj import FromTclStringNDArray
5+
import numpy as np
6+
7+
app = None
8+
9+
def PyAggImagePhoto(photoimage, data, mode):
10+
interp = PyAggImagePhoto.interp
11+
if not tklib.Tk_MainWindow(interp):
12+
raise _tkinter.TclError("this isn't a Tk application")
13+
photo = tklib.Tk_FindPhoto(interp, photoimage)
14+
if not photo:
15+
tklib.Tcl_AppendResult(interp, "destination photo must exist", 0)
16+
return tklib.TCL_ERROR
17+
img = FromTclStringNDArray(data)
18+
has_bbox = False
19+
pBlock = tkffi.new('Tk_PhotoImageBlock[1]')
20+
block = pBlock[0]
21+
block.pixelSize = 1
22+
if mode == 0:
23+
block.offset[0] = block.offset[1] = block.offset[2] = 0
24+
nval = 1
25+
else:
26+
block.offset[0] = 0
27+
block.offset[1] = 1
28+
block.offset[2] = 2
29+
if mode == 1:
30+
block.offset[3] = 0
31+
block.pixelSize = 3
32+
nval = 3
33+
else:
34+
block.offset[3] = 3
35+
block.pixelSize = 4
36+
if has_bbox:
37+
block.width = destwidth
38+
block.height = destheight
39+
block.pitch = deststride
40+
block.pixelPtr = destbuffer
41+
42+
tklib.Tk_PhotoPutBlock_NoComposite(photo, pBlock, destx, desty,
43+
destwidth, destheight);
44+
45+
else:
46+
block.width = shape[1]
47+
block.height = shape[0]
48+
block.pitch = img.strides[0]
49+
block.pixelPtr = tkffi.from_buffer(img)
50+
51+
#/* Clear current contents */
52+
tklib.Tk_PhotoBlank(photo);
53+
#/* Copy opaque block to photo image, and leave the rest to TK */
54+
tklib.Tk_PhotoPutBlock_NoComposite(photo, pBlock, 0, 0,
55+
block.width, block.height);
56+
return tklib.TCL_OK
57+
58+
def tkinit(tk):
59+
tk.createcommand(b"PyAggImagePhoto", PyAggImagePhoto)
60+
PyAggImagePhoto.interp = tk.interp
61+

lib/matplotlib/backends/tkagg.py

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,51 @@
77
import numpy as np
88

99
from matplotlib.backends import _tkagg
10+
from platform import python_implementation
1011

11-
def blit(photoimage, aggimage, bbox=None, colormode=1):
12-
tk = photoimage.tk
13-
14-
if bbox is not None:
15-
bbox_array = bbox.__array__()
16-
else:
17-
bbox_array = None
18-
data = np.asarray(aggimage)
19-
try:
20-
tk.call(
21-
"PyAggImagePhoto", photoimage,
22-
id(data), colormode, id(bbox_array))
23-
except Tk.TclError:
12+
if python_implementation() == 'PyPy':
13+
def blit(photoimage, aggimage, bbox=None, colormode=1):
14+
tk = photoimage.tk
15+
16+
if bbox is not None:
17+
bbox_array = bbox.__array__()
18+
else:
19+
bbox_array = None
20+
data = np.asarray(aggimage)
21+
try:
22+
tk.call(
23+
"PyAggImagePhoto", photoimage,
24+
data, colormode, bbox_array)
25+
except Tk.TclError:
26+
_tkagg.tkinit(tk)
27+
tk.call("PyAggImagePhoto", photoimage,
28+
data, colormode, bbox_array)
29+
30+
else:
31+
def blit(photoimage, aggimage, bbox=None, colormode=1):
32+
tk = photoimage.tk
33+
34+
if bbox is not None:
35+
bbox_array = bbox.__array__()
36+
else:
37+
bbox_array = None
38+
data = np.asarray(aggimage)
2439
try:
40+
import pdb;pdb.set_trace()
41+
tk.call(
42+
"PyAggImagePhoto", photoimage,
43+
id(data), colormode, id(bbox_array))
44+
except Tk.TclError:
2545
try:
26-
_tkagg.tkinit(tk.interpaddr(), 1)
27-
except AttributeError:
28-
_tkagg.tkinit(id(tk), 0)
29-
tk.call("PyAggImagePhoto", photoimage,
30-
id(data), colormode, id(bbox_array))
31-
except (ImportError, AttributeError, Tk.TclError):
32-
raise
46+
import pdb;pdb.set_trace()
47+
try:
48+
_tkagg.tkinit(tk.interpaddr(), 1)
49+
except AttributeError:
50+
_tkagg.tkinit(id(tk), 0)
51+
tk.call("PyAggImagePhoto", photoimage,
52+
id(data), colormode, id(bbox_array))
53+
except (ImportError, AttributeError, Tk.TclError):
54+
raise
3355

3456
def test(aggimage):
3557
import time

0 commit comments

Comments
 (0)