Python Tkinter程序更新屏幕,但我不明白在没有任何canvas.create命令的情况下如何更新
在我从Web修改的这段代码中,canvas.create语句像往常一样用于创建网格和文本,但函数AddPoint中没有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
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
的调用是毫无意义的。