Экран обновлений программы Tkinter, но я не понимаю, как без каких-либо команд canvas.create - PullRequest
0 голосов
/ 07 июня 2018

В этом коде, который я изменил из Интернета, операторы canvas.create используются для создания сетки и текста как обычно, но в функции AddPoint, которая вызывается для обновления графика, нет оператора create, поэтому я не вижукак сюжет пишется.Какое утверждение вызывает обновление сюжета?

    import Tkinter,  time, sys, math
    from random import *
    global latch
    start = 50
    end =   800
    class HPSA:

        def HPSA_grid(self):                                                                               # create a grid
            self.lines=[]
            self.lastpos=0
            self.canvas.create_rectangle(0, 0, 800, 512, fill="black")
            self.canvas.create_text(25, 20, fill="red", text=str("dB"), anchor="e")
            self.canvas.create_text(770, 500, fill="red", text=str("MHz"), anchor="e")
            # horizontal lines   
            for y in range(0,480,50):                                                                      
                    self.canvas.create_line(0, y, 800, y, fill="#444444",dash=(4, 4))
                    #self.canvas.create_line(0, y, 800, y, fill="red",dash=(4, 4))
                    self.canvas.create_text(5, y-10, fill="#999999", text=str(-y*2/10), anchor="w")
            # vertical lines  
            for x in range(start,800,80):                                                                   
                    self.canvas.create_line(x, 0, x, 512, fill="#444444",dash=(4, 4))
                    #self.canvas.create_line(x, 0, x, 512, fill=red,dash=(4, 4))
                    self.canvas.create_text(x+3, 500-10, fill="#999999", text=str(x/10), anchor="w")
            # draw start vertical line        
            self.canvas.create_line(start, 0, start, 470, fill="yellow")   
            # draw start horizontal line                                
            self.canvas.create_line(start, 470, 800, 470, fill="yellow")                                  

            self.lineRedraw=self.canvas.create_line(0, 800, 0, 0, fill="red")

           # self.lines1text=self.canvas.create_text(800-3, 10, fill="#00FF00", text=str("TEST"), anchor="e")
            for x in range(800):
                    self.lines.append(self.canvas.create_line(x, 0, x, 0, fill="#00FF00"))

        def addPoint(self,val):
            if self.xpos>start:
                pass
                self.canvas.coords(self.lines[self.xpos],(self.xpos-1,self.lastpos,self.xpos,val))
            if self.xpos<800:
                pass
                #self.canvas.coords(self.lineRedraw,(self.xpos+1,val +5,self.xpos+1,val-5))           #  ?? draws red line near val
            self.lastpos=val
            self.xpos+=1
            if self.xpos==800:
                    self.xpos=0
                    self.totalPoints+=800
                    latch = 0
                    my_screen.update()       # continuosly draws points     
        def __init__(self, my_screen):
            self.xpos=start
            self.line1avg=0
            self.data=[0]*800
            self.canvas = Tkinter.Canvas(my_screen, width=800, height=512)
            self.canvas.pack()
            self.totalPoints=0
            self.HPSA_grid()
            self.timeStart=time.time()

    my_screen = Tkinter.Tk()
    my_screen.wm_title("HPSA")
    a = HPSA(my_screen)
    my_screen.update()    # draws screen immediately
    k= .041
    for x in range (10,800,1):
      point = 250 - 250*(math.sin(k*x)/(k*x))  
      a.addPoint(point)

1 Ответ

0 голосов
/ 07 июня 2018

Похоже, что этот код создает 800 точек в виде линий нулевой длины при запуске, а addPoint просто корректирует координаты этих линий, чтобы нарисовать график.

Вот код, который первоначально создает 800 строк:

for x in range(800):
    self.lines.append(self.canvas.create_line(x, 0, x, 0, fill="#00FF00"))

Внутри addPoint, он изменяет координаты каждой из этих строк здесь:

self.canvas.coords(self.lines[self.xpos],(self.xpos-1,self.lastpos,self.xpos,val))

Вы можете получить тот же эффект, удалив цикл, который изначально создает все строки, а затем заменив эту строку в addPos вызовом create_line.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...