7 def print_fig_prop(fig
):
8 for ind_ax
, ax
in enumerate(P
.figure(fig
).axes
):
9 print "*** Axe %d ***"%ind
_ax
10 print "Xmin : %g"%ax
.get_xlim()[0]
11 print "Xmax : %g"%ax
.get_xlim()[1]
12 print "Ymin : %g"%ax
.get_ylim()[0]
13 print "Ymax : %g"%ax
.get_ylim()[1]
14 print "Fontsize (X) : %g"%ax
.get_xticklabels()[0].get_fontsize()
15 print "Fontsize (Y) : %g"%ax
.get_yticklabels()[0].get_fontsize()
16 print "Title : " + ax
.title
.get_text()
17 print "Title fontsize : %g"%ax
.title
.get_fontsize()
18 print "X label : " + ax
.xaxis
.get_label().get_text()
19 print "X label fontsize : %g"%ax
.xaxis
.get_label().get_fontsize()
20 print "Y label : " + ax
.yaxis
.get_label().get_text()
21 print "Y label fontsize : %g"%ax
.yaxis
.get_label().get_fontsize()
23 for ind_line
, line
in enumerate(ax
.lines
):
24 print " *** Line %d ***"%ind
_line
25 print " Style : " + line
.get_linestyle()
26 print " Marker : " + line
.get_marker()
27 print " Line Width : %.1f"%line
.get_linewidth()
28 print " Color : " + line
.get_color()
29 for ind_im
, im
in enumerate(ax
.images
):
30 print " *** Image %d ***"%ind
_im
31 print " Colormap : " + im
.cmap
.name
32 print " Interpolation : " + im
.get_interpolation()
33 print " Extent : [%g, %g, %g, %g]"%(im
.get_extent()[0],im
.get_extent()[1],im
.get_extent()[2],im
.get_extent()[3], )
37 def row_activated(self
, treeview
):
38 model
, iter = treeview
.get_selection().get_selected()
39 type = model
.get_value(iter, 1)
40 self
.type_selected
= type
41 obj
= model
.get_value(iter,2)
42 self
.selected
= model
.get_value(iter,2)
43 self
.fig
= model
.get_value(iter, 3)
45 self
.display_line(obj
)
49 self
.display_image(obj
)
50 elif type == 'figure':
51 self
.display_figure(obj
)
53 def get_value(self
, obj
, name
):
54 if name
== 'linestyle':
55 return obj
.get_linestyle()
56 elif name
== 'marker':
57 return obj
.get_marker()
58 elif name
== 'linewidth':
59 return obj
.get_linewidth()
60 elif name
== 'linecolor':
61 return obj
.get_color()
63 return obj
.get_xlim()[0]
65 return obj
.get_xlim()[1]
67 return obj
.get_ylim()[0]
69 return obj
.get_ylim()[1]
71 return obj
.title
.get_text()
72 elif name
== 'titlefontsize':
73 return obj
.title
.get_fontsize()
74 elif name
== 'xlabel':
75 return obj
.xaxis
.get_label().get_text()
76 elif name
== 'ylabel':
77 return obj
.yaxis
.get_label().get_text()
78 elif name
== 'xfontsize':
79 return obj
.xaxis
.get_ticklabels()[0].get_fontsize()
80 elif name
== 'yfontsize':
81 return obj
.yaxis
.get_ticklabels()[0].get_fontsize()
82 elif name
== 'xlabelfontsize':
83 return obj
.xaxis
.get_label().get_fontsize()
84 elif name
== 'ylabelfontsize':
85 return obj
.yaxis
.get_label().get_fontsize()
86 elif name
== 'figwidth':
87 return obj
.window
.get_size()[0]
88 elif name
== 'figheight':
89 return obj
.window
.get_size()[1]
91 return obj
.get_position()[0]
93 return obj
.get_position()[1]
95 return obj
.get_position()[2]
96 elif name
== 'height':
97 return obj
.get_position()[3]
98 elif name
== 'xbegin':
99 return obj
.get_extent()[0]
101 return obj
.get_extent()[1]
102 elif name
== 'ybegin':
103 return obj
.get_extent()[2]
105 return obj
.get_extent()[3]
108 elif name
== 'interp':
109 return obj
.get_interpolation()
110 elif name
== 'label':
111 return obj
.get_label()
112 elif name
== 'textx':
113 return obj
.get_position()[0]
114 elif name
== 'texty':
115 return obj
.get_position()[1]
117 return obj
.get_text()
121 def set_value(self
, obj
, name
, value
):
122 if name
== 'linestyle':
123 obj
.set_linestyle(value
)
124 elif name
== 'marker':
125 obj
.set_marker(value
)
126 elif name
== 'linewidth':
127 obj
.set_linewidth(float(value
))
128 elif name
== 'linecolor':
130 elif name
== 'xmin' or name
== 'xmax':
131 obj
.set_xlim([float(self
.param
['xmin'].get_text()), float(self
.param
['xmax'].get_text())])
132 elif name
== 'ymin' or name
== 'ymax':
133 obj
.set_ylim([float(self
.param
['ymin'].get_text()), float(self
.param
['ymax'].get_text())])
134 elif name
== 'title':
135 obj
.title
.set_text(value
)
136 elif name
== 'titlefontsize':
137 obj
.title
.set_fontsize(float(value
))
138 elif name
== 'xlabel':
139 obj
.xaxis
.get_label().set_text(value
)
140 elif name
== 'ylabel':
141 obj
.yaxis
.get_label().set_text(value
)
142 elif name
== 'xfontsize':
143 for tick
in obj
.xaxis
.get_ticklabels():
144 tick
.set_fontsize(float(value
))
145 elif name
== 'yfontsize':
146 for tick
in obj
.yaxis
.get_ticklabels():
147 tick
.set_fontsize(float(value
))
148 elif name
== 'xlabelfontsize':
149 obj
.xaxis
.get_label().set_fontsize(float(value
))
150 elif name
== 'ylabelfontsize':
151 obj
.yaxis
.get_label().set_fontsize(float(value
))
152 elif name
== 'figwidth' or name
== 'figheight':
153 obj
.resize(int(self
.param
['figwidth'].get_text()),int(self
.param
['figheight'].get_text()) )
154 elif name
== 'xpos' or name
=='ypos' or name
== 'width' or name
== 'height':
155 a
= float(self
.param
['xpos'].get_text())
156 b
= float(self
.param
['ypos'].get_text())
157 c
= float(self
.param
['width'].get_text())
158 d
= float(self
.param
['height'].get_text())
159 obj
.set_position([a
,b
,c
,d
])
161 obj
.set_cmap(getattr(P
.cm
, value
))
162 elif name
== 'interp':
163 obj
.set_interpolation(value
)
164 elif name
== 'label':
166 elif name
== 'textx':
167 obj
.set_x(float(value
))
168 elif name
== 'texty':
169 obj
.set_y(float(value
))
173 def remove(self
, widget
):
174 self
.paramtable
.remove(widget
)
176 def add_param(self
, widget
, name
, title
, obj
):
180 tmp2
= gtk
.Label(title
)
184 default
= self
.get_value(obj
, name
)
187 self
.param
[name
] = gtk
.Entry(20)
188 self
.param
[name
].set_text(str(default
))
189 self
.param
[name
].connect("activate", self
.apply)
190 self
.param
[name
].show()
191 tmp
.pack_start(self
.param
[name
])
193 widget
.pack_start(tmp
, False)
195 def display_line(self
, line
):
196 self
.paramtable
.foreach(self
.remove
)
198 for name
in self
.param_lines_order
:
199 self
.add_param(self
.paramtable
, name
, self
.param_lines
[name
], line
)
201 def display_axe(self
, ax
):
202 self
.paramtable
.foreach(self
.remove
)
204 for name
in self
.param_axe_order
:
205 self
.add_param(self
.paramtable
, name
, self
.param_axe
[name
], ax
)
207 def display_figure(self
, figure
):
208 self
.paramtable
.foreach(self
.remove
)
210 for name
, title
in self
.param_figure
.items():
211 self
.add_param(self
.paramtable
, name
, title
, figure
)
212 def display_text(self
, text
):
213 self
.paramtable
.foreach(self
.remove
)
215 for name
, title
in self
.param_text_order
:
216 self
.add_param(self
.paramtable
, name
, title
, text
)
218 def display_image(self
, im
):
219 self
.paramtable
.foreach(self
.remove
)
221 for name
in self
.param_image_order
:
222 self
.add_param(self
.paramtable
, name
, self
.param_image
[name
], im
)
224 def apply(self
, widget
):
226 for name
, button
in self
.param
.items():
227 value
= button
.get_text()
228 self
.set_value(obj
, name
, value
)
231 self
.row_activated(self
.treeview
)
233 def delete(self
, widget
):
234 model
, iter = self
.treeview
.get_selection().get_selected()
235 if self
.type_selected
=='axe':
236 P
.delaxes(self
.selected
)
239 elif self
.type_selected
=='figure':
241 elif self
.type_selected
=='line':
242 axe
= model
.get_value(model
.iter_parent(iter), 2)
243 del axe
.lines
[model
.get_value(iter, 4)]
246 elif self
.type_selected
=='image':
247 axe
= model
.get_value(model
.iter_parent(iter), 2)
248 del axe
.images
[model
.get_value(iter, 4)]
251 elif self
.type_selected
=='text':
252 axe
= model
.get_value(model
.iter_parent(iter), 2)
253 del axe
.texts
[model
.get_value(iter, 4)]
256 self
.treestore
.remove(iter)
257 self
.paramtable
.foreach(self
.remove
)
260 def update(self
, widget
):
261 self
.window
.destroy()
264 def copy(self
, widget
):
265 model
, iter = self
.treeview
.get_selection().get_selected()
266 if self
.type_selected
=='line':
272 self
.param_names
= {'label': 'Label',
273 'linestyle': 'Line style',
275 'linewidth': 'Line Width',
276 'linecolor': 'Line Color',
278 'interp': 'Interpolation',
280 'xpos': 'X position',
281 'ypos': 'Y position',
289 'titlefontsize': 'Title fontsize',
292 'xlabelfontsize': 'Fontsize (X label)',
293 'ylabelfontsize': 'Fontsize (Y label)',
294 'xfontsize': 'Fontsize (X ticks)',
295 'yfontsize': 'Fontsize (Y ticks)',
297 'figheight': 'Height',
298 'textx': 'X position',
299 'texty': 'Y position',
302 self
.param_lines_order
= ['label', 'linestyle', 'linecolor', 'linewidth', 'marker']
303 self
.param_image_order
= ['label', 'cmap', 'interp']
304 self
.param_axe_order
= ['xpos', 'ypos', 'width', 'height',
305 'xmin', 'xmax', 'ymin', 'ymax',
306 'title', 'titlefontsize',
307 'xlabel', 'xlabelfontsize',
308 'ylabel', 'ylabelfontsize',
309 'xfontsize', 'yfontsize']
310 self
.param_figure_order
= ['figwidth', 'figheight']
311 self
.param_text_order
= ['textx', 'texty', 'text']
314 self
.window
= gtk
.Window(gtk
.WINDOW_TOPLEVEL
)
315 self
.window
.set_title('Graphics properties')
316 self
.window
.set_default_size(300, 400)
319 self
.paramtable
= gtk
.VBox()
320 self
.paramtable
.show()
321 self
.treestore
= gtk
.TreeStore(gobject
.TYPE_STRING
, str, object, int, int)
322 self
.treeview
= gtk
.TreeView(self
.treestore
)
323 self
.treeview
.set_headers_visible(False)
324 renderer
= gtk
.CellRendererText()
325 column
= gtk
.TreeViewColumn('Object ID', renderer
, text
=0)
326 self
.treeview
.append_column(column
)
327 for figure
in P
.matplotlib
._pylab
_helpers
.Gcf
.get_all_fig_managers():
329 iter_fig
= self
.treestore
.append(None, ['Figure %d'%fig, 'figure' ,figure
, fig
, fig
])
330 for ind_ax
, ax
in enumerate(P
.figure(fig
).axes
):
331 iter_ax
= self
.treestore
.append(iter_fig
, ['Axe %d'%ind
_ax
, 'axe' ,ax
, fig
, ind_ax
])
332 for ind_line
, line
in enumerate(ax
.lines
):
333 iter = self
.treestore
.append(iter_ax
, ['Line %d'%ind
_line
, 'line', line
, fig
, ind_line
])
334 for ind_im
, im
in enumerate(ax
.images
):
335 iter = self
.treestore
.append(iter_ax
, ['Image %d'%ind
_im
, 'image',im
, fig
, ind_im
])
336 for ind_text
, text
in enumerate(ax
.texts
):
337 iter = self
.treestore
.append(iter_ax
, ['Text %d'%ind
_text
, 'text', text
, fig
, ind_text
])
343 self
.treeview
.connect("cursor-changed", self
.row_activated
)
344 scroll
= gtk
.ScrolledWindow()
345 scroll
.set_policy(gtk
.POLICY_NEVER
, gtk
.POLICY_AUTOMATIC
)
346 scroll
.add(self
.treeview
)
348 hbox
.pack_start(scroll
)
350 viewport
= gtk
.Viewport()
351 viewport
.add(self
.paramtable
)
353 scroll
= gtk
.ScrolledWindow()
354 scroll
.set_policy(gtk
.POLICY_NEVER
, gtk
.POLICY_AUTOMATIC
)
357 hbox
.pack_start(scroll
)
360 button
= gtk
.Button('Update')
361 button
.connect("clicked", self
.update
)
363 bottom
.pack_start(button
)
364 button
= gtk
.Button('Copy')
365 button
.connect("clicked", self
.copy
)
367 bottom
.pack_start(button
)
368 button
= gtk
.Button('Delete')
369 button
.connect("clicked", self
.delete
)
371 bottom
.pack_start(button
)
373 button
= gtk
.Button('Apply')
374 button
.connect("clicked", self
.apply)
376 bottom
.pack_start(button
)
379 vbox
.pack_start(hbox
)
380 vbox
.pack_start(bottom
, False)
381 self
.window
.add(vbox
)