Runtime Error

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Jaga
User
Beiträge: 64
Registriert: Mittwoch 21. August 2013, 13:18

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()
FASTER! HARDER! LOUDER!
Jaga
User
Beiträge: 64
Registriert: Mittwoch 21. August 2013, 13:18

Falls es was nutzt die Meldung lautet:
this application has requested the Runtime to terminate in an unusal way.
FASTER! HARDER! LOUDER!
Antworten