def __init__(self, master):
        from Tkinter import Label, Entry, Canvas, Button
        from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
        from matplotlib.figure import Figure
    
        Label(master, text="Initial conditions:").grid(row=0, column=0, columnspan=2)
        Label(master, text="x").grid(row=1, column=0)
        Label(master, text="y").grid(row=2, column=0)
        Label(master, text="p_x").grid(row=3, column=0)
        Label(master, text="p_y").grid(row=4, column=0)
        Label(master, text="alpha").grid(row=5, column=0)
        Label(master, text="omega").grid(row=6, column=0)
        Label(master, text="steps").grid(row=7, column=0)
        Button(master, text="Plot", command=self.replot).grid(row=8, column=0, columnspan=2)

        self.x = Entry(master)
        self.y = Entry(master)
        self.px = Entry(master)
        self.py = Entry(master)
        self.alpha = Entry(master)
        self.omega = Entry(master)
        self.steps = Entry(master)

        self.x.grid(row=1, column=1)
        self.y.grid(row=2, column=1)
        self.px.grid(row=3, column=1)
        self.py.grid(row=4, column=1)
        self.alpha.grid(row=5, column=1)
        self.omega.grid(row=6, column=1)
        self.steps.grid(row=7, column=1)

        self.x.insert(0, 0.)
        self.y.insert(0, 0.)
        self.px.insert(0, 0.)
        self.py.insert(0, 1.)
        self.alpha.insert(0, 1.)
        self.omega.insert(0, 2.)
        self.steps.insert(0, 1000)

        self.cyclotron = Cyclotron()
        self.rcyclotron = RelativisticCyclotron()
        self.resetInitialConditions()

        self.figure = Figure(figsize=(6,5), dpi=100)
        self.a = self.figure.add_subplot(111)

        self.canvas = FigureCanvasTkAgg(self.figure, master=master)
        self.canvas.show()
        self.canvas.get_tk_widget().grid(row=0, column=2, rowspan=8)
class App:
    def __init__(self, master):
        from Tkinter import Label, Entry, Canvas, Button
        from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
        from matplotlib.figure import Figure
    
        Label(master, text="Initial conditions:").grid(row=0, column=0, columnspan=2)
        Label(master, text="x").grid(row=1, column=0)
        Label(master, text="y").grid(row=2, column=0)
        Label(master, text="p_x").grid(row=3, column=0)
        Label(master, text="p_y").grid(row=4, column=0)
        Label(master, text="alpha").grid(row=5, column=0)
        Label(master, text="omega").grid(row=6, column=0)
        Label(master, text="steps").grid(row=7, column=0)
        Button(master, text="Plot", command=self.replot).grid(row=8, column=0, columnspan=2)

        self.x = Entry(master)
        self.y = Entry(master)
        self.px = Entry(master)
        self.py = Entry(master)
        self.alpha = Entry(master)
        self.omega = Entry(master)
        self.steps = Entry(master)

        self.x.grid(row=1, column=1)
        self.y.grid(row=2, column=1)
        self.px.grid(row=3, column=1)
        self.py.grid(row=4, column=1)
        self.alpha.grid(row=5, column=1)
        self.omega.grid(row=6, column=1)
        self.steps.grid(row=7, column=1)

        self.x.insert(0, 0.)
        self.y.insert(0, 0.)
        self.px.insert(0, 0.)
        self.py.insert(0, 1.)
        self.alpha.insert(0, 1.)
        self.omega.insert(0, 2.)
        self.steps.insert(0, 1000)

        self.cyclotron = Cyclotron()
        self.rcyclotron = RelativisticCyclotron()
        self.resetInitialConditions()

        self.figure = Figure(figsize=(6,5), dpi=100)
        self.a = self.figure.add_subplot(111)

        self.canvas = FigureCanvasTkAgg(self.figure, master=master)
        self.canvas.show()
        self.canvas.get_tk_widget().grid(row=0, column=2, rowspan=8)

    def resetInitialConditions(self):
        self.cyclotron.setInitialConditions(
                float(self.x.get()),
                float(self.y.get()),
                float(self.px.get()),
                float(self.py.get()),
                float(self.alpha.get()),
                float(self.omega.get()))
        self.rcyclotron.setInitialConditions(
                float(self.x.get()),
                float(self.y.get()),
                float(self.px.get()),
                float(self.py.get()),
                float(self.alpha.get()),
                float(self.omega.get()))

    def replot(self):
        self.resetInitialConditions()
        xs = []
        ys = []
        rxs = []
        rys = []
        for i in xrange(int(self.steps.get())):
            x,y = self.cyclotron.getPosition()
            xs.append(x)
            ys.append(y)
            x,y = self.rcyclotron.getPosition()
            rxs.append(x)
            rys.append(y)
            self.cyclotron.evolve(0.005)
            self.rcyclotron.evolve(0.005)

        self.a.clear()
        self.a.plot(xs, ys, rxs, rys)
        self.canvas.draw()