Matplotlib 崩溃 tkinter 应用程序 [英] Matplotlib Crashing tkinter Application

查看:33
本文介绍了Matplotlib 崩溃 tkinter 应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个将 matplotlib 图形嵌入 GUI 的应用程序.问题是,只要我将 matplotlib 中的任何内容添加到我的代码中,我的应用程序就会崩溃(导入除外,它们照常工作).问题发生在我的 tk.Tk.__init__(self, *args, **kwargs) 班级 Solver_App 中.当我运行代码时,我收到了一个巨大的错误,应用程序崩溃了.这是我的一些代码:

I am building an application that embeds a matplotlib figure into the GUI. The problem is that my app is crashing as soon as I add anything from matplotlib into my code (except for the imports, those work as usual). The problem occurs in my class Solver_App at tk.Tk.__init__(self, *args, **kwargs). When I run the code, I get a massive error and the app crashes. Here is some of my code:

import tkinter as tk
from tkinter import ttk

import matplotlib
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure

# Setting up figures for integration in GUI:
fig_3D = plt.figure()
fig_2D = plt.figure()
a_3D = fig_3D.add_subplot(111, projection="3d")
a_2D = fig_2D.add_subplot(111)
a_3D.plot_wireframe([1, 2, 3, 4, 5], [1, 3, 7, 6, 4], [1, 2, 3, 4, 5], color="blue")

class Solver_App(tk.Tk, ttk.Frame):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)  # This is where the app crashes.

        # Equation frame holds everything related to the input and configuration of the equations.
        equation_frame = ttk.Frame(self)
        equation_frame.pack(side="bottom", fill="x", pady=50, padx=50)

        # More code goes here...

# There are more classes with a similar setup as the one above...

app = Solver_App()
app.mainloop()

这是我在运行代码时遇到的大量错误:

And here is the massive error I get when running the code:

2015-08-14 15:18:29.142 Python[50796:18837594] -[NSApplication _setup:]: unrecognized selector sent to instance 0x10216a830
2015-08-14 15:18:29.143 Python[50796:18837594] An uncaught exception was raised
2015-08-14 15:18:29.143 Python[50796:18837594] -[NSApplication _setup:]: unrecognized selector sent to instance 0x10216a830
2015-08-14 15:18:29.144 Python[50796:18837594] (
    0   CoreFoundation                      0x00007fff9901b03c __exceptionPreprocess + 172
    1   libobjc.A.dylib                     0x00007fff9436476e objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff9901e0ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x00007fff98f63e24 ___forwarding___ + 1028
    4   CoreFoundation                      0x00007fff98f63998 _CF_forwarding_prep_0 + 120
    5   Tk                                  0x00000001024ad527 TkpInit + 476
    6   Tk                                  0x0000000102427aca Tk_Init + 1788
    7   _tkinter.so                         0x00000001006e5f2d Tcl_AppInit + 77
    8   _tkinter.so                         0x00000001006e30d6 Tkinter_Create + 934
    9   Python                              0x00000001000e44ce PyEval_EvalFrameEx + 28894
    10  Python                              0x00000001000e5ced PyEval_EvalCodeEx + 2349
    11  Python                              0x000000010003e8ba function_call + 186
    12  Python                              0x000000010000d3c8 PyObject_Call + 104
    13  Python                              0x00000001000e0cb9 PyEval_EvalFrameEx + 14537
    14  Python                              0x00000001000e5ced PyEval_EvalCodeEx + 2349
    15  Python                              0x000000010003e8ba function_call + 186
    16  Python                              0x000000010000d3c8 PyObject_Call + 104
    17  Python                              0x000000010002802c method_call + 140
    18  Python                              0x000000010000d3c8 PyObject_Call + 104
    19  Python                              0x000000010007b831 slot_tp_init + 81
    20  Python                              0x0000000100072d14 type_call + 212
    21  Python                              0x000000010000d3c8 PyObject_Call + 104
    22  Python                              0x00000001000e1b09 PyEval_EvalFrameEx + 18201
    23  Python                              0x00000001000e5ced PyEval_EvalCodeEx + 2349
    24  Python                              0x00000001000e5daf PyEval_EvalCode + 63
    25  Python                              0x000000010011048e PyRun_FileExFlags + 206
    26  Python                              0x000000010011083d PyRun_SimpleFileExFlags + 717
    27  Python                              0x000000010012810e Py_Main + 3262
    28  Python                              0x0000000100000e32 Python + 3634
    29  Python                              0x0000000100000c84 Python + 3204
    30  ???                                 0x0000000000000002 0x0 + 2
)
2015-08-14 15:18:29.144 Python[50796:18837594] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSApplication _setup:]: unrecognized selector sent to instance 0x10216a830'
*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff9901b03c __exceptionPreprocess + 172
    1   libobjc.A.dylib                     0x00007fff9436476e objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff9901e0ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x00007fff98f63e24 ___forwarding___ + 1028
    4   CoreFoundation                      0x00007fff98f63998 _CF_forwarding_prep_0 + 120
    5   Tk                                  0x00000001024ad527 TkpInit + 476
    6   Tk                                  0x0000000102427aca Tk_Init + 1788
    7   _tkinter.so                         0x00000001006e5f2d Tcl_AppInit + 77
    8   _tkinter.so                         0x00000001006e30d6 Tkinter_Create + 934
    9   Python                              0x00000001000e44ce PyEval_EvalFrameEx + 28894
    10  Python                              0x00000001000e5ced PyEval_EvalCodeEx + 2349
    11  Python                              0x000000010003e8ba function_call + 186
    12  Python                              0x000000010000d3c8 PyObject_Call + 104
    13  Python                              0x00000001000e0cb9 PyEval_EvalFrameEx + 14537
    14  Python                              0x00000001000e5ced PyEval_EvalCodeEx + 2349
    15  Python                              0x000000010003e8ba function_call + 186
    16  Python                              0x000000010000d3c8 PyObject_Call + 104
    17  Python                              0x000000010002802c method_call + 140
    18  Python                              0x000000010000d3c8 PyObject_Call + 104
    19  Python                              0x000000010007b831 slot_tp_init + 81
    20  Python                              0x0000000100072d14 type_call + 212
    21  Python                              0x000000010000d3c8 PyObject_Call + 104
    22  Python                              0x00000001000e1b09 PyEval_EvalFrameEx + 18201
    23  Python                              0x00000001000e5ced PyEval_EvalCodeEx + 2349
    24  Python                              0x00000001000e5daf PyEval_EvalCode + 63
    25  Python                              0x000000010011048e PyRun_FileExFlags + 206
    26  Python                              0x000000010011083d PyRun_SimpleFileExFlags + 717
    27  Python                              0x000000010012810e Py_Main + 3262
    28  Python                              0x0000000100000e32 Python + 3634
    29  Python                              0x0000000100000c84 Python + 3204
    30  ???                                 0x0000000000000002 0x0 + 2
)
libc++abi.dylib: terminating with uncaught exception of type NSException

我一直在引用教程中的代码 [在这里找到](http://pythonprogramming.net/how-to-embed-matplotlib-graph-tkinter-gui/"How to embed a Matplotlib graph to your Tkinter GUI"),但他们的例子似乎工作正常.导致此问题的原因是什么?如何解决?

I have been referencing code from a tutorial [found here](http://pythonprogramming.net/how-to-embed-matplotlib-graph-tkinter-gui/"How to embed a Matplotlib graph to your Tkinter GUI"), but their example seems to work fine. What is causing this problem and how can it be fixed?

  • 我使用的是 Python 3.4、matplotlib 1.4.3,并运行 Mac OS Yosemite.

推荐答案

您需要明确设置 TkAgg 后端.我可以重现你的错误.使用以下代码,问题解决.

You need to set the TkAgg backend explicitly. I could reproduce your bug. With the following code, the problem is resolved.

import matplotlib
matplotlib.use("TkAgg")
from matplotlib import pyplot as plt

请注意,在导入 pyplot 之后 设置 TkAgg 后端也不起作用;它也会崩溃.你需要在导入pyplot之前设置它.(使用 MPL 1.4.3、tkinter.TkVersion 8.6 测试)

Note that setting the TkAgg backend after importing pyplot does not work either; it crashes too. You need to set it before importing pyplot. (Tested with MPL 1.4.3, tkinter.TkVersion 8.6)

这篇关于Matplotlib 崩溃 tkinter 应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆