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

Paul Hobson pmhobson at gmail.com
Wed May 18 11:04:30 EDT 2016


Does that crash still occur if you don't import matplotlib? This doesn't
look at a matplotlib issue to me.

On Wed, May 18, 2016 at 6:02 AM, Eric's Gmail <eric.shain at gmail.com> wrote:

> 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
>
> Tom
>
> On Wed, May 18, 2016 at 8:42 AM Eric's Gmail <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> 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/
>>
>> Cheers!
>> Ben Root
>>
>>
>> On Tue, Apr 26, 2016 at 5:28 PM, Eric <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
>>> Sent from the matplotlib - users mailing list archive at Nabble.com
>>> <http://nabble.com/>.
>>> _______________________________________________
>>> Matplotlib-users mailing list
>>> Matplotlib-users at python.org
>>> https://mail.python.org/mailman/listinfo/matplotlib-users
>>>
>>
>>
>> _______________________________________________
>> Matplotlib-users mailing list
>> Matplotlib-users at python.org
>> https://mail.python.org/mailman/listinfo/matplotlib-users
>>
>
>
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users at python.org
> 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/b3bf6950/attachment-0001.html>


More information about the Matplotlib-users mailing list