0

The value on the plot will be not updated. In my own class, I have one integrated from our community friends.The Plot won't show generated values!How could I turn on autoscale ?Further, I would like that x-axis to be moved during the program execute. For example, it shows always a last 10 seconds.

import Tkinter,time

root = Tkinter.Tk
class InterfaceApp(root):
    def __init__ (self, parent):
        root.__init__(self,parent)
        self.parent = parent
        self.initialize()
        self.on_stop()

    def initialize(self):
        self.min_x = 0
        self.max_x = 10
        self.xdata = []
        self.ydata = []
        self.on_launch()

    # Frame and LabelFrame create
        frInst = Tkinter.Frame(bg='', colormap='new')
        frBut = Tkinter.Frame(bg='', colormap='new')
        grInst = Tkinter.LabelFrame(frInst, text='Choose an Instruments', padx=5, pady=5)
        grSet = Tkinter.LabelFrame(frInst, text='Settings', padx=5, pady=7)

    # Create Settings and Buttons

        self.but_start = Tkinter.Button(frBut, text='Start', command=lambda: self.on_start(), width=10)
        self.but_stop = Tkinter.Button(frBut, text='Stop', command=lambda: self.on_stop(), width=10)
        self.but_quit = Tkinter.Button(frBut, text='Quit', command=lambda: self.on_quit(), width=10)

    # Grid
        frInst.grid(row=0)
        frBut.grid(row=3)
        grInst.grid(row=0)
        grSet.grid(row=0, column=1)

        # Power Supply Grid
        self.but_start.grid(row=2, column=1, sticky='W')
        self.but_stop.grid(row=2, column=2, sticky='W')
        self.but_quit.grid(row=2, column=3, sticky='W')


    # Function
    def on_quit(self):
        self.W_kSMU("output off")
        self.quit()
        self.destroy()

    def on_start(self):
        self.running = True
        self.but_start.configure(state='disabled')
        self.but_stop.configure(state='normal')
        self.Run()

    def Run(self):
        self.timer = randint(0,100)
        self.t_volt = randint(0,100)
        self.xdata.append(self.timer)
        self.ydata.append(self.t_volt)
        self.on_running(self.xdata, self.ydata)
        time.sleep(1)
        self.read_ps = 3

        if self.running:
            self.after(5000, self.Run)

    def on_launch(self):
        #Set up plot
        self.figure, self.ax = plt.subplots()
        self.lines, = self.ax.plot([],[], 'o')
        #Autoscale on unknown axis and known lims on the other
        self.ax.set_autoscaley_on(True)
        self.ax.set_xlim(self.min_x, self.max_x)
        #Other stuff
        self.ax.grid()

    def on_running(self, xdata, ydata):
        #Update data (with the new _and_ the old points)
        self.lines.set_xdata(xdata)
        self.lines.set_ydata(ydata)
        #Need both of these in order to rescale
        self.ax.relim()
        self.ax.autoscale_view()
        #We need to draw *and* flush
        self.figure.canvas.draw()
        self.figure.canvas.flush_events()

    def on_stop(self):
        self.but_start.configure(state='normal')
        self.but_stop.configure(state='disabled')
        self.running = False

if __name__ == "__main__":
    app = InterfaceApp(None)
    app.title("MPW")
    app.mainloop()

and code from our friends: https://stackoverflow.com/a/15742183/6403009

Community
  • 1
  • 1
Mirza Grbic
  • 152
  • 1
  • 3
  • 14

1 Answers1

0

I was looking at the code, is the line "plt.subplots()" correct? and there is another thing, in th following line, you write: "self.lines, =" maybe the comma should be off,can you confirm it? Good luck!

  • Comments are written in the comment section above, not in the answer section. – Parviz Karimli Jul 25 '16 at 09:47
  • @ParvizKarimli Ricardo does not have enough reputation to post comments. That said, I agree with you. This should be a comment, not an answer. – Jokab Jul 25 '16 at 10:30