如何制作在 for 循环中画线的函数(tkinter 3.x)
How to make functions that draw lines in a for loop(tkinter 3.x)
我的问题是,当我使用 :
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() 不允许任何循环 运行,我真的希望有一个替代方案。
在tk(inter)中,实时循环是用root.after完成的。 SO 上有多个示例,您可以通过搜索 [tkinter] root.after
找到。以下是您的代码的一个版本,简化为 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()
在每个 cans.create_line(i,0,0,i)
之后插入代码
root.update()
它会实时更新对我有用的任何更改
示例
for i in range(0,50):
cans.create_line(i,0,0,i)
root.update()
我的问题是,当我使用 :
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() 不允许任何循环 运行,我真的希望有一个替代方案。
在tk(inter)中,实时循环是用root.after完成的。 SO 上有多个示例,您可以通过搜索 [tkinter] root.after
找到。以下是您的代码的一个版本,简化为 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()
在每个 cans.create_line(i,0,0,i)
root.update()
它会实时更新对我有用的任何更改
示例
for i in range(0,50):
cans.create_line(i,0,0,i)
root.update()