首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tkinter程序更新屏幕,但我不明白没有任何canvas.create命令

Tkinter程序更新屏幕,但我不明白没有任何canvas.create命令
EN

Stack Overflow用户
提问于 2018-06-08 03:19:58
回答 1查看 19关注 0票数 0

在我从网站修改的这段代码中,canvas.create语句照常用于创建网格和文本,但是在函数AddPoint中没有create语句,它被调用来更新绘图,所以我看不出绘图是如何编写的。下列哪一项陈述会导致绘图更新?

代码语言:javascript
复制
    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)
EN

回答 1

Stack Overflow用户

发布于 2018-06-08 03:55:05

看起来,这段代码在开始时创建了800个点作为长度为零的线,addPoint只是简单地调整这些线的坐标来绘制图形。

以下是最初创建800行的代码:

代码语言:javascript
复制
for x in range(800):
    self.lines.append(self.canvas.create_line(x, 0, x, 0, fill="#00FF00"))

addPoint内部,它在这里修改每一行的坐标:

代码语言:javascript
复制
self.canvas.coords(self.lines[self.xpos],(self.xpos-1,self.lastpos,self.xpos,val))

通过删除最初创建所有行的循环,然后将addPos中的该行替换为对create_line的调用,可以获得相同的效果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50748750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档