Skip to content Skip to sidebar Skip to footer

How Can I Open Two Different Pylab Figures From The Same Button From A Wxpython Gui?

I am new to python and I have a serious problem that I cannot overcome. I have created a gui using wxpython that has two text fields and a button. When this button is pressed I cal

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()

Solution 3:

If you want to create pie charts or other types of graphs in wxPython, then you should use PyPlot (included in wx) or matplotlib, which can be embedded in wxPython. The wxPython demo has an example of PyPlot. For matplot see here or here.

Post a Comment for "How Can I Open Two Different Pylab Figures From The Same Button From A Wxpython Gui?"