- 论坛徽章:
- 0
|
8好意思哈,单位最近事多,晚上回家看球,嘻。
刚试了一下,稍微改了一下,在def draw_dot(self, draw_a): 的最后加上
self.after(1000) 的确可以刷新Canvas。
但是有个问题,想不明白。
修改之后的代码如下
- class myCanvas(Tkinter.Canvas):
- dot = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] #储存点的ID
- r = 3 #画的点的半径
- a = 0 #接收ping返回的时间
- def __init__(self, master):
- Tkinter.Canvas.__init__(self, master, relief=Tkinter.RAISED,\
- width=450, height=120)
- self.pack()
- self.create_line(10, 100, 410, 100, width=2) # x轴
- self.create_line(10, 10, 10, 100, width=2) # y轴
- for i in range(20): #X轴小刻度
- self.create_line(10+20*i, 100, 10+20*i, 96, width=1)
- for i in range(10): #Y轴小刻度
- self.create_line(10, 10+9*i, 13, 10+9*i, width=1)
- [color=Red]for i in range(5):[/color]
- [color=Red]self.leftClick()[/color]
- def leftClick(self, event):
- self.a = 0
- self.a = self.pingNode(timeout=10.0, number=1,\
- node='10.254.241.33', flood=0, size=ICMP_DATA_STR)
-
- self.draw_dot(self.a)
- [color=Red]def draw_dot(self):#画点[/color]
- if self.dot[0]:
- self.delete(self, self.dot[0]) #删除最左边的点,现在已经移出x轴了。
- for i in range(19):
- if self.dot[i]:
- self.move(self.dot[i], -20, 0) #依次向左移动每一个点
- for i in range(18):
- self.dot[i] = self.dot[i+1]
- #根据ping返回时间画不同颜色的点
- if draw_a == -1: #ping不通
- self.dot[18] = self.create_oval(390-self.r, 10-self.r,\
- 390+self.r, 10+self.r,width=1, outline='black', fill='red')
- else:
- if draw_a > 10: #pingtime >10
- self.dot[18] = self.create_oval(390-self.r, 10-self.r,\
- 390+self.r, 10+self.r,width=1, outline='black', fill='yellow')
- else: #10秒之内
- self.dot[18] = self.create_oval(390-self.r, 97-draw_a*9,\
- 390+self.r, 103-draw_a*9,width=1, outline='black', fill='SkyBlue2')
- [color=Red]print 1 #注意!![/color]
- [color=Red]self.after(1000)[/color]
- def pingNode(self, timeout=5.0, number=5, node=None, \
- flood=0, size=ICMP_DATA_STR):
- 。。。 。。。
- root = Tkinter.Frame()
- root.pack()
- myCanvas(root)
- root.mainloop()
复制代码
红色的就是做过修改的部分
问题就是,
1。如果不加红色的print 1 部分,Canvas就会停住,直到5次循环过后,一次把5个点都画出来。
2。如果写了print 1,则是画一个点,sleep 1000ms,再刷新Canvas,画下一个点,如此循环5次。
点解??
我想要的是第2种的结果,怎么可以不写print 1就可以实现相同的功能??
 |
|