我需要在图形中实时显示动态数据。因此,我需要用每秒更新的数据绘制一个新的图表。
问题是我不能在浏览器中清空之前的输出,所以我得到的不是包含更新数据的简单图形,而是很多图形
下面是代码。目前它有随机数据
def graph(data):
X,Y = 500, 275 #image width and height
img = Image.new("RGB", (X,Y), "#FFFFFF")
draw = ImageDraw.Draw(img)
#draw some axes and markers
for i in range(X/10):
draw.line((i*10+30, Y-15, i*10+30, 20), fill="#DDD")
if i % 5 == 0:
draw.text((i*10+15, Y-15), `i*10`, fill="#000")
for j in range(1,Y/10-2):
draw.text((0,Y-15-j*10), `j*10`, fill="#000")
draw.line((20,Y-19,X,Y-19), fill="#000")
draw.line((19,20,19,Y-18), fill="#000")
for i in range(1,len(data)):
draw.line((i+20,Y-20,i+20,Y-20-data[i]), fill="#000")
rtime = str(time.time())
img.save("../images/out.png"+rtime, "PNG")
htmlBody = []
htmlBody.insert(0, 'Content-type: text/html; charset=UTF-8\n')
htmlBody.append('<html>')
htmlBody.append('<body>')
htmlBody.append('<img src=\"../images/out.png'+rtime+'\" alt=\"\" />')
htmlBody.append("</body>")
htmlBody.append('</html>')
sys.stdout.flush()
sys.stdout.write('\n'.join(htmlBody))
sys.stdout.flush()
data = []
if (printgraph!=None):
sys.stdout = sys.stderr = oldsysout
for i in range(1,5):
data.append(int(250*(random.random())))
graph(data)
sys.stdout.flush()
time.sleep(1)
exit()发布于 2011-12-15 23:17:41
我将创建一个单独的CGI脚本来创建图像。然后,您可以在图像标记中引用新脚本。src="makepic.py"。
遵循this guide,让Python脚本提供动态图像。在页面上,您可以使用JavaScript的settimeout刷新图像。
发布于 2011-12-15 23:19:13
您可以考虑一个带有HTTP "Refresh“头的页面。标题的内容应该是用分号分隔的两个项目。第一个是2(刷新后的秒数),第二个是页面的URL (因为您希望重复内容)。如果需要,您还可以使用META标记从页面内容中注入一个伪头。
不幸的是,这将意味着后端的一些重新组织,因为页面现在必须在每次调用时提供计算的当前状态的表示。这不一定是一件容易的事。
要创建一个页面,其中服务器可以随时“推送”新内容,您需要进行一些编程。考虑交付一个脚本流,这些脚本将DIV属性设置为下一个图的InnerHTML,而不仅仅是交付纯HTML。然后让您的页面请求此内容。这还有一个进一步的优势,即页面不会在每次发送新图形时都完全刷新。
https://stackoverflow.com/questions/8522139
复制相似问题