[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