How Can I Open Two Different Pylab Figures From The Same Button From A Wxpython Gui?
Solution 1:
See this page for advice on getting pylab to work with wxPython--which you probably shouldn't really try (see next paragraph). The problem is that pylab uses Tkinter which is incompatible with a running copy of wxPython.
Ultimately, you should just embed your plots in wxPython. That works very well and is a better user experience anyway.
Solution 2:
Try issuing the command pylab.ion()
after you import pylab, and see if that lets you show multiple plots. That has always been my approach when needing to repeatedly show updating plots without closing the window.
Note that you'll need to create new figure and axes objects for each different plot window, otherwise plots will overwrite old plots.
For example, the following code works to produce two windows with different plots for me:
import pylab
pylab.ion()
fig1 = pylab.figure()
fig1.add_subplot(111).plot([1,2],[3,4])
pylab.draw()
fig2 = pylab.figure()
fig2.add_subplot(111).plot([5,6],[10,9])
pylab.draw()
Added
Given your follow-up comments, here is a new script that does use show()
, but which displays the different plots each time pylab.draw()
is called, and which leaves the plot windows showing indefinitely. It uses simple input logic to decide when to close the figures (because using show()
means pylab won't process clicks on the windows x button), but that should be simple to add to your gui as another button or as a text field.
import numpy as np
import pylab
pylab.ion()
defget_fig(fig_num, some_data, some_labels):
fig = pylab.figure(fig_num,figsize=(8,8),frameon=False)
ax = fig.add_subplot(111)
ax.set_ylim([0.1,0.8]); ax.set_xlim([0.1, 0.8]);
ax.set_title("Quarterly Stapler Thefts")
ax.pie(some_data, labels=some_labels, autopct='%1.1f%%', shadow=True);
return fig
my_labels = ("You", "Me", "Some guy", "Bob")
# To ensure first plot is always made.
do_plot = 1; num_plots = 0;
while do_plot:
num_plots = num_plots + 1;
data = np.random.rand(1,4).tolist()[0]
fig = get_fig(num_plots,data,my_labels)
fig.canvas.draw()
pylab.draw()
print"Close any of the previous plots? If yes, enter its number, otherwise enter 0..."
close_plot = raw_input()
ifint(close_plot) > 0:
pylab.close(int(close_plot))
print"Create another random plot? 1 for yes; 0 for no."
do_plot = raw_input();
# Don't allow plots to go over 10.if num_plots > 10:
do_plot = 0
pylab.show()
Post a Comment for "How Can I Open Two Different Pylab Figures From The Same Button From A Wxpython Gui?"