[Matplotlib-users] Use of Pyplot in a GUI script

Eric's Gmail eric.shain at gmail.com
Wed May 18 09:02:04 EDT 2016


Thomas,

This is a minimal example. In this case I’m not even plotting:

from easygui import fileopenbox
import matplotlib.pyplot as plt
import numpy as np

ft = ["JSON", ["*.jsn", "*.json"]]
filename = fileopenbox(msg='Select JSON files',title='Import', filetypes=ft, multiple=False)
print(filename)
x = np.arange(10)
y = x**2

Trying to run this from the terminal (OS X, 10.11.4, Python 3.5.1) yield the following:

Erics-MacBook-Air:QTtest ericshain$ python plottest.py
2016-05-18 07:56:57.023 python[23268:3602317] -[NSApplication _setup:]: unrecognized selector sent to instance 0x109c3c500
2016-05-18 07:56:57.038 python[23268:3602317] An uncaught exception was raised
2016-05-18 07:56:57.039 python[23268:3602317] -[NSApplication _setup:]: unrecognized selector sent to instance 0x109c3c500
2016-05-18 07:56:57.039 python[23268:3602317] (
	0   CoreFoundation                      0x00007fff8b1c94f2 __exceptionPreprocess + 178
	1   libobjc.A.dylib                     0x00007fff8897af7e objc_exception_throw + 48
	2   CoreFoundation                      0x00007fff8b2331ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
	3   CoreFoundation                      0x00007fff8b139571 ___forwarding___ + 1009
	4   CoreFoundation                      0x00007fff8b1390f8 _CF_forwarding_prep_0 + 120
	5   libtk8.5.dylib                      0x000000010161c76d TkpInit + 472
	6   libtk8.5.dylib                      0x0000000101594f91 Initialize + 1541
	7   _tkinter.cpython-35m-darwin.so      0x00000001003efded Tcl_AppInit + 77
	8   _tkinter.cpython-35m-darwin.so      0x00000001003ed7f9 _tkinter_create + 889
	9   libpython3.5m.dylib                 0x00000001000679d9 PyCFunction_Call + 233
	10  libpython3.5m.dylib                 0x00000001000f4cd7 PyEval_EvalFrameEx + 36647
	11  libpython3.5m.dylib                 0x00000001000f5900 _PyEval_EvalCodeWithName + 2400
	12  libpython3.5m.dylib                 0x00000001000f5a07 PyEval_EvalCodeEx + 71
	13  libpython3.5m.dylib                 0x00000001000426ba function_call + 186
	14  libpython3.5m.dylib                 0x000000010000de63 PyObject_Call + 99
	15  libpython3.5m.dylib                 0x000000010002b12c method_call + 140
	16  libpython3.5m.dylib                 0x000000010000de63 PyObject_Call + 99
	17  libpython3.5m.dylib                 0x0000000100080cc1 slot_tp_init + 81
	18  libpython3.5m.dylib                 0x000000010007b964 type_call + 212
	19  libpython3.5m.dylib                 0x000000010000de63 PyObject_Call + 99
	20  libpython3.5m.dylib                 0x00000001000edb9c PyEval_EvalFrameEx + 7660
	21  libpython3.5m.dylib                 0x00000001000f5900 _PyEval_EvalCodeWithName + 2400
	22  libpython3.5m.dylib                 0x00000001000f3c75 PyEval_EvalFrameEx + 32453
	23  libpython3.5m.dylib                 0x00000001000f5900 _PyEval_EvalCodeWithName + 2400
	24  libpython3.5m.dylib                 0x00000001000f5a61 PyEval_EvalCode + 81
	25  libpython3.5m.dylib                 0x00000001001247ee PyRun_FileExFlags + 206
	26  libpython3.5m.dylib                 0x0000000100124a8f PyRun_SimpleFileExFlags + 447
	27  libpython3.5m.dylib                 0x000000010013d497 Py_Main + 3479
	28  python                              0x0000000100000e92 main + 418
	29  python                              0x0000000100000cc4 start + 52
	30  ???                                 0x0000000000000002 0x0 + 2
)
2016-05-18 07:56:57.039 python[23268:3602317] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSApplication _setup:]: unrecognized selector sent to instance 0x109c3c500'
*** First throw call stack:
(
	0   CoreFoundation                      0x00007fff8b1c94f2 __exceptionPreprocess + 178
	1   libobjc.A.dylib                     0x00007fff8897af7e objc_exception_throw + 48
	2   CoreFoundation                      0x00007fff8b2331ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
	3   CoreFoundation                      0x00007fff8b139571 ___forwarding___ + 1009
	4   CoreFoundation                      0x00007fff8b1390f8 _CF_forwarding_prep_0 + 120
	5   libtk8.5.dylib                      0x000000010161c76d TkpInit + 472
	6   libtk8.5.dylib                      0x0000000101594f91 Initialize + 1541
	7   _tkinter.cpython-35m-darwin.so      0x00000001003efded Tcl_AppInit + 77
	8   _tkinter.cpython-35m-darwin.so      0x00000001003ed7f9 _tkinter_create + 889
	9   libpython3.5m.dylib                 0x00000001000679d9 PyCFunction_Call + 233
	10  libpython3.5m.dylib                 0x00000001000f4cd7 PyEval_EvalFrameEx + 36647
	11  libpython3.5m.dylib                 0x00000001000f5900 _PyEval_EvalCodeWithName + 2400
	12  libpython3.5m.dylib                 0x00000001000f5a07 PyEval_EvalCodeEx + 71
	13  libpython3.5m.dylib                 0x00000001000426ba function_call + 186
	14  libpython3.5m.dylib                 0x000000010000de63 PyObject_Call + 99
	15  libpython3.5m.dylib                 0x000000010002b12c method_call + 140
	16  libpython3.5m.dylib                 0x000000010000de63 PyObject_Call + 99
	17  libpython3.5m.dylib                 0x0000000100080cc1 slot_tp_init + 81
	18  libpython3.5m.dylib                 0x000000010007b964 type_call + 212
	19  libpython3.5m.dylib                 0x000000010000de63 PyObject_Call + 99
	20  libpython3.5m.dylib                 0x00000001000edb9c PyEval_EvalFrameEx + 7660
	21  libpython3.5m.dylib                 0x00000001000f5900 _PyEval_EvalCodeWithName + 2400
	22  libpython3.5m.dylib                 0x00000001000f3c75 PyEval_EvalFrameEx + 32453
	23  libpython3.5m.dylib                 0x00000001000f5900 _PyEval_EvalCodeWithName + 2400
	24  libpython3.5m.dylib                 0x00000001000f5a61 PyEval_EvalCode + 81
	25  libpython3.5m.dylib                 0x00000001001247ee PyRun_FileExFlags + 206
	26  libpython3.5m.dylib                 0x0000000100124a8f PyRun_SimpleFileExFlags + 447
	27  libpython3.5m.dylib                 0x000000010013d497 Py_Main + 3479
	28  python                              0x0000000100000e92 main + 418
	29  python                              0x0000000100000cc4 start + 52
	30  ???                                 0x0000000000000002 0x0 + 2
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Abort trap: 6


Eric

> On May 18, 2016, at 7:52 AM, Thomas Caswell <tcaswell at gmail.com> wrote:
> 
> The crashes are likely due to conflicts between the multiple gui event loops, how ever with out a minimal example it is hard to say.
> 
> pyplot functions are mostly auto-generated and have the form
> 
> def foo(*args, **kwargs):
>     retrun gca().foo(*args, **kwargs)
> 
> so anything you can do in pyplot you can do via the OO api.  Just take a look at the pyplot source for the functions you want to use and replace `gca` with an Axes object or `gcf` with a Figure object.
> 
> Full Axes api docs: http://matplotlib.org/api/axes_api.html <http://matplotlib.org/api/axes_api.html>
> 
> Tom
> 
> On Wed, May 18, 2016 at 8:42 AM Eric's Gmail <eric.shain at gmail.com <mailto:eric.shain at gmail.com>> wrote:
> Ben,
> 
> I don’t really want a GUI application it this case. What I’m usually wanting is run pyplot with a file open dialog and a file save dialog. The file dialogs are important since I’m importing lots of json files and it would be a mess to try to type lots of long file names. I’ve tried several options including easygui, Tk and pyqt4. In theses cases, I can run them so long as I’m in an ipython console. However, as soon as I try to run from the terminal, I get a crash. I’ve managed by avoiding pyplot, but it is much nicer than using matplotlib without it.
> 
> Eric
> 
>> On May 16, 2016, at 1:46 PM, Benjamin Root <ben.v.root at gmail.com <mailto:ben.v.root at gmail.com>> wrote:
>> 
>> In general, yes, you should avoid using pyplot when embedding. However, that rule actually only needs to be strictly followed when you are embedding the matplotlib's canvas into your own instantiated Window object. If you are embedding GUI elements into a matplotlib figure window, you actually can still utilize pyplot (but very carefully).
>> 
>> I suggest reading up my book: http://www.amazon.com/Interactive-Applications-using-Matplotlib-Benjamin/dp/1783988843/ <http://www.amazon.com/Interactive-Applications-using-Matplotlib-Benjamin/dp/1783988843/>
>> 
>> Cheers!
>> Ben Root
>> 
>> 
>> On Tue, Apr 26, 2016 at 5:28 PM, Eric <eric.shain at gmail.com <mailto:eric.shain at gmail.com>> wrote:
>> I've read that when writing a GUI application to avoid using pyplot. I
>> experienced this when I wrote a python script that called the tkinter file
>> dialog and then processed and plotted data. It would run when launched in
>> Ipython but would crash when run in the terminal. It ran in terminal when I
>> eliminated the file dialog and the file dialog code ran without the
>> plotting. I rewrote the script using pyqt4, and avoided using pyplot using
>> matplotlib figure instead. First question is is it true that I should avoid
>> any use of pyplot in a gui app? Second is that I find it hard to do things
>> in matplotlib that are easy in pyplot like drawing horizontal or vertical
>> lines and such. Is there documentation and code examples using the
>> matplotlib without pyplot?
>> 
>> Thanks, Eric
>> 
>> 
>> 
>> --
>> View this message in context: http://matplotlib.1069221.n5.nabble.com/Use-of-Pyplot-in-a-GUI-script-tp47030.html <http://matplotlib.1069221.n5.nabble.com/Use-of-Pyplot-in-a-GUI-script-tp47030.html>
>> Sent from the matplotlib - users mailing list archive at Nabble.com <http://nabble.com/>.
>> _______________________________________________
>> Matplotlib-users mailing list
>> Matplotlib-users at python.org <mailto:Matplotlib-users at python.org>
>> https://mail.python.org/mailman/listinfo/matplotlib-users <https://mail.python.org/mailman/listinfo/matplotlib-users>
>> 
> 
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users at python.org <mailto:Matplotlib-users at python.org>
> https://mail.python.org/mailman/listinfo/matplotlib-users <https://mail.python.org/mailman/listinfo/matplotlib-users>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20160518/03e7b574/attachment-0001.html>


More information about the Matplotlib-users mailing list