如何制作在for循环中绘制线条的函数(tkinter 3.x)

时间:2016-03-27 20:11:58

标签: python-3.x tkinter tkinter-canvas

我的问题是,当我使用时:

from tkinter import *
import time

root = Tk()
root.geometry("800x850")

cans=Canvas(root,height=500,width=600)

a=Scale(root,from_=0,to=600)
b=Scale(root,from_=0,to=500)
c=Scale(root,from_=0,to=600)

for i in range(0,50):
    cans.create_line(i,0,0,i)  #< the loop that i am talking about

cans.pack()
root.mainloop()

tkinter的作用是,它等待直到绘制线条(直到循环重复50次),然后才显示应用程序。

我想用这个循环做的是在显示应用程序时实时绘制tkinter画线。  有人可以给我一个替代方法来执行此操作,或者告诉我代码有什么问题吗?

更新:Tkinter不会让任何循环与其mainloop()一起运行,我真的希望有一个替代它。

2 个答案:

答案 0 :(得分:0)

在tk(inter)中,使用root.after完成实时循环。您可以通过搜索[tkinter] root.after找到有关SO的多个示例。下面是您的代码的版本,缩小为MCVE,行间隔一点。

from tkinter import *
import time

root = Tk()

cans=Canvas(root,height=500,width=600)
cans.pack()

delay = 200  # milliseconds
def draw_line(i=0):
    if i <= 150:
        cans.create_line(i,0,0,i)
        root.after(delay, draw_line, i+3)

draw_line()       
root.mainloop()

答案 1 :(得分:0)

在每个<div class="flexcontainer"> <div> <img src="" alt="Employee's Picture" id="picture"> </div> <div> <ul> <li> <h3>Full name: <span id="name"></span></h3> </li> <li> <h3>Gender: <span id="gender"></span></h3> </li> <li> <h3>Phone number: <span id="phone"></span></h3> </li> <li> <h3>Company: <span id="company"></span></h3> </li> <li> <h3>Address: <span id="address"></span></h3> </li> </ul> </div> </div>之后

插入代码
root.update()


它会实时更新对我有用的所有更改
示例

cans.create_line(i,0,0,i)