Seite 1 von 1

Runtime Error

Verfasst: Dienstag 10. September 2013, 10:50
von Jaga
So nun hängts an nem Runtime Error. Das Programm lässt sich normal ausführen und funktioniert bis jetzt wie es soll.
Allerdings kommt etwa 5 sekunden nachdem das Programm und die Python shell beendet wurden (normal über das rote x ) ein Runtime Error. Wodran liegt das?

Hier mein code:

Code: Alles auswählen

import matplotlib.pyplot as plt
import numpy as np
import Tkinter
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
import parser
import re


REPLACE_DIC = {'sin' : 'np.sin',
               'arcsin' : 'np.arcsin',
               'sinh' : 'np.sinh',
               'arcsinh' : 'np.arcsinh',
               'cos' : 'np.cos',
               'arccos' : 'np.arccos',
               'cosh' : 'np.cosh',
               'arccosh' : 'np.arccosh',
               'tan' : 'np.tan',
               'arctan' : 'np.arctan',
               'tanh' : 'np.tanh',
               'arctanh' : 'np.arctanh',
               'ln' : 'np.log',
               'log' : 'np.log',
               'log10' : 'np.log10',
               'exp' : 'np.exp',
               '^' : '**',
               'sqrt' : 'np.sqrt',
               'pi' : 'np.pi',
               
               }
class App():

    def __init__(self, master):

        self.master = master
        self.initUI()

    def initUI(self):
        

        
        self.master.title("Funktionsplotter")

           
        
        
        self.label_funktion = Tkinter.Label(self.master, text = "Funktion: f(x)")
        self.label_funktion.grid(row = 0, column = 0)

        self.entry_funktion = Tkinter.Entry(self.master, width = 150)
        self.entry_funktion.grid(row = 0, column = 1)

        self.label_startwert = Tkinter.Label(self.master, text = "Startwert der Funktion:")
        self.label_startwert.grid(row = 2, column = 0)

        self.entry_startwert = Tkinter.Entry(self.master, width = 15)
        self.entry_startwert.grid(row = 2, column = 1)

        self.label_endwert = Tkinter.Label(self.master, text = "Endwert der Funktion:")
        self.label_endwert.grid(row = 3, column = 0)

        self.entry_endwert = Tkinter.Entry(self.master, width = 15)
        self.entry_endwert.grid(row = 3, column = 1)

        self.label_genauigkeit = Tkinter.Label(self.master, text = "Abstand zwischen zu berechnenden Punkten:")
        self.label_genauigkeit.grid(row = 4, column = 0)

        self.entry_genauigkeit = Tkinter.Entry(self.master, width = 15)
        self.entry_genauigkeit.grid(row = 4, column = 1)

        self.plot_button = Tkinter.Button(self.master, text = "Funktion plotten", command = self.plot)
        self.plot_button.grid(row = 0, column = 4)

        self.hinzufueg_button = Tkinter.Button(self.master, text = "Zum Plot hinzufügen", command = self.hinzufuegen)
        self.hinzufueg_button.grid(row = 2, column = 4)

        

        fig = plt.figure()
        canvas = FigureCanvasTkAgg(fig, master=self.master)
        toolbar = NavigationToolbar2TkAgg(canvas, self.master)
        canvas.get_tk_widget().grid(row=5, column=1)
        toolbar.grid(row=7, column=1)



    def formel_berechnen(self,):
            self.x = np.arange(float(self.entry_startwert.get()),
                                float(self.entry_endwert.get()),
                                float(self.entry_genauigkeit.get()))

            x = self.x
            formula_raw = self.entry_funktion.get().replace('e^x', 'exp(x)')
            formula_raw_exp = formula_raw.replace('e^', 'exp')
            formula_list = re.split('(\W)', formula_raw_exp)
            formula_replace = [REPLACE_DIC.get(item,item) for item in formula_list]
            formula_finish = ''.join(formula_replace)
            form = parser.expr(formula_finish).compile()
            try:
                self.y = eval(form)
                self.legend = self.entry_funktion.get()
            except NameError:
                self.y = np.sin(self.x)
                self.legend = 'sin(x)'
            
            return (self.x,self.y,self.legend)
        
    
        

    def plot(self):
            self.formel_berechnen()
            plt.clf()
            plt.plot(self.x,self.y, label=self.legend)
            plt.grid('on')
            plt.xlabel('x - Achse')
            plt.ylabel('y - Achse')
            plt.legend()
            plt.gcf().canvas.draw()

    def hinzufuegen(self):
            self.formel_berechnen()
            plt.plot(self.x,self.y, label=self.legend)
            plt.legend()
            plt.gcf().canvas.draw()


            
def main():
     
     root = Tkinter.Tk()
     app = App(root)
     root.mainloop()

if __name__ == '__main__':
    main()

Re: Runtime Error

Verfasst: Dienstag 10. September 2013, 12:35
von Jaga
Falls es was nutzt die Meldung lautet:
this application has requested the Runtime to terminate in an unusal way.