在我从网站修改的这段代码中,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)发布于 2018-06-08 03:55:05
看起来,这段代码在开始时创建了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的调用,可以获得相同的效果。
https://stackoverflow.com/questions/50748750
复制相似问题