Python error; graph hangs;Tkinter -


  1. i trying plot 2 graph in tkinter canvas.
  2. problem after few plots of data, graph gets hanged. takes huge resources of window, have kill forcefully.
  3. since have plot graph continuously in cro/dso have go line line rather using library. didn't find lib graph printed continuously.
  4. i using python 2.7 on window 8 64 bit.
  5. but in end have shift code raspberry pi board.

code: tkinter import * import tkinter import time random import randint import math

    #global vars     hor_pixel = 5                      #starting point of horizontal pixel     old_ver_pixel_1 = 0                #last pixel value of graph 1     old_ver_pixel_2 = 0                #last pixel value of graph 2     new_ver_pixel_1 = 0                #new pixel value of graph 1     new_ver_pixel_2 = 0                #new pixel value of graph 2     y0_1 = 0                           # y cordinate of graph 1 & 2     y1_1 = 0     y0_2 = 0     y1_2 = 0      def pixel(c):         global hor_pixel         global old_ver_pixel_1         global old_ver_pixel_2             global new_ver_pixel_1         global new_ver_pixel_2         global y0_1         global y1_1         global y0_2         global y1_2              if(new_ver_pixel_1 == old_ver_pixel_1):             new_ver_pixel_1 = new_ver_pixel_1 + 1         if(new_ver_pixel_2 == old_ver_pixel_2):             new_ver_pixel_2 = new_ver_pixel_2 + 1                      if(new_ver_pixel_1 > old_ver_pixel_1):             y0_1 = old_ver_pixel_1             y1_1 = new_ver_pixel_1         else:             y0_2 = old_ver_pixel_2             y1_2 = new_ver_pixel_2                  coord = hor_pixel, y0_1, hor_pixel, y1_1         coord2 = hor_pixel, y0_2, hor_pixel, y1_2                 hor_pixel = hor_pixel + 1          if(hor_pixel > 400):             hor_pixel = 5;          old_ver_pixel_1 = new_ver_pixel_1         old_ver_pixel_2 = new_ver_pixel_2          c.create_line(hor_pixel , 0 , hor_pixel , 500, fill = 'black')         c.create_line(coord, fill = 'red')         c.create_line(coord2, fill = 'yellow')         c.pack()         #print(new_ver_pixel_1 , new_ver_pixel_2)        def graph():         global new_ver_pixel_1         global new_ver_pixel_2          screen = tkinter.tk()         screen.title("analog channel")         screen.geometry("800x800")         c = tkinter.canvas(screen , bg = "black" , height = 800, width = 800)         c.pack()          while true:             var = 0             var = var + 1             new_ver_pixel_1 = randint(0,200) + 200;             new_ver_pixel_2 = randint(0,200) + 400;             #print(new_ver_pixel_1 , new_ver_pixel_2)             #pixel(c)             screen.after(100,pixel(c))             screen.update_idletasks()          screen.mainloop()       graph() 

this statement doesn't think does:

screen.after(100,pixel(c)) 

what think runs pixel(c) every 100ms, run pixel(c) immediately, , schedules none execute in 100ms. why chewing cpu , hanging.

one fix change screen.after(100, pixel, c). however, custom infinite loop wrong way run function every 100ms tkinter.

what need instead remove infinite loop, , leverage existing infinite loop (mainloop()). move body of while loop function, , have function put call on event queue using after. work, schedule run again in 100 ms, forever. can put check on global flag if want able pause or cancel redrawing.

it looks this:

def updategraph(canvas):     <do work updating graph>     canvas.after(100, updategraph, canvas) 

Comments

Popular posts from this blog

javascript - Using jquery append to add option values into a select element not working -

Android soft keyboard reverts to default keyboard on orientation change -

Rendering JButton to get the JCheckBox behavior in a JTable by using images does not update my table -