2015-08-14 25 views
12

Buduję aplikację, która umieszcza figurkę matplotlib w graficznym interfejsie użytkownika. Problem polega na tym, że moja aplikacja ulega awarii, gdy tylko dodam cokolwiek z Matplotlib do mojego kodu (z wyjątkiem importu, te działają jak zwykle). Problem występuje w mojej klasie Solver_App pod adresem tk.Tk.__init__(self, *args, **kwargs). Po uruchomieniu kodu pojawia się ogromny błąd i aplikacja ulega awarii. Oto niektóre z moich kodu:Aplikacja Matplotlib Crashing tkinter Aplikacja

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

I tu jest ogromny błąd pojawia się podczas uruchamiania kodu:

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 

I zostały przedstawieniu kodu z samouczka [znalezionego tutaj] (http://pythonprogramming.net/how-to-embed-matplotlib-graph-tkinter-gui/ „Jak do osadzenia wykresu Matplotlib w GUI Tkintera "), ale ich przykład działa dobrze. Co powoduje ten problem i jak można go naprawić?

  • Używam Python 3.4, matplotlib 1.4.3 i Mac OS Yosemite.
+0

Mam wrażenie, że pominąłeś najważniejsze części. Sprawdź, czy możesz oddać to destylacji do [MCVE] (http://stackoverflow.com/help/mcve), to prawdopodobnie pomoże ci rozwiązać twój problem. Jedna wskazówka, gdy to robisz: podczas osadzania rzeczy w Tkinter, nie używaj 'pyplot'; użyj rzeczywistego "rysunku", który zaimportowałeś. Pominąłeś miejsca, w których mogliśmy zobaczyć, czy to robisz, czy nie. – Ajean

+0

Spróbuj wykonać następujące czynności. 'plt.rcParams ['keymap.save'] = ''' Może to wynikać ze sposobu, w jaki mac ma powiązania klawiszy. Ostatnim razem, gdy miałem wyjątek NSE, wyrzucony przez tkintera na Maca, było to spowodowane sposobem, w jaki tkinter i mac konfliktują z kluczowymi powiązaniami. – Pythonista

Odpowiedz

27

Musisz jawnie ustawić backend TkAgg. Mogę odtworzyć twój błąd. Poniższy kod rozwiązuje problem.

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

Należy pamiętać, że ustawienie backend TkAgg po importującego pyplot nie działa albo; to też się zawiesza. Musisz ustawić go przed importowaniem pyplota. (Testowane z MPL 1.4.3, tkinter.TkVersion 8.6)

+0

Naprawiono dla mnie - testowałem z mpl 1.5.1, tkinter.TkVersion 8.5 – theicfire

+0

Jak urok! Dzięki. – Rynkadink