Python Tkinter程序更新屏幕,但我不明白在没有任何canvas.create命令的情况下如何更新

Python Tkinter程序更新屏幕,但我不明白在没有任何canvas.create命令的情况下如何更新,python,tkinter,Python,Tkinter,在我从Web修改的这段代码中,canvas.create语句像往常一样用于创建网格和文本,但函数AddPoint中没有create语句,该函数用于更新绘图,因此我看不到绘图是如何编写的。什么语句导致绘图更新 import Tkinter, time, sys, math from random import * global latch start = 50 end = 800 class HPSA: def HPSA_gr

在我从Web修改的这段代码中,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)
导入Tkinter、时间、系统、数学
从随机导入*
全局闩锁
开始=50
完=800
HPSA类:
def HPSA_网格(自身):#创建网格
self.lines=[]
self.lastpos=0
self.canvas.create_矩形(0,0,800,512,fill=“black”)
self.canvas.create_text(25,20,fill=“red”,text=str(“dB”),anchor=“e”)
self.canvas.create_text(770500,fill=“red”,text=str(“MHz”),anchor=“e”)
#水平线
对于范围(0480,50)内的y:
self.canvas.create_行(0,y,800,y,fill=“#444444”,破折号=(4,4))
#创建线(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”)
#垂直线
对于范围内的x(开始,800,80):
self.canvas.create_行(x,0,x,512,fill=“#444444”,破折号=(4,4))
#self.canvas.create_线(x,0,x,512,fill=red,dash=(4,4))
self.canvas.create_text(x+3500-10,fill=“#999999”,text=str(x/10),anchor=“w”)
#绘制起始垂直线
self.canvas.create_行(开始,0,开始,470,fill=“黄色”)
#画起点水平线
self.canvas.create_行(start,470,800470,fill=“yellow”)
self.lineRedraw=self.canvas.create_行(0800,0,0,fill=“red”)
#self.lines1text=self.canvas.create_text(800-3,10,fill=“#00FF00”,text=str(“测试”),anchor=“e”)
对于范围(800)内的x:
self.lines.append(self.canvas.create_行(x,0,x,0,fill=“#00FF00”))
def添加点(自身,val):
如果self.xpos>启动:
通过
self.canvas.coords(self.lines[self.xpos],(self.xpos-1,self.lastpos,self.xpos,val))

如果self.xpos则该代码在开始时会创建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\u line

来获得相同的效果。我不确定是否需要update语句。我相信tkinter会更新它的主循环。我可能错了。@Mike SMT:你是对的:在这段特定的代码中,对
update
的调用是毫无意义的。