[英]How to use time.sleep() to draw circles Tkinter?
我編寫了一個程序來探索 Tkinter 並嘗試面向對象編程。 我的目標是畫同心圓,從外面開始,往里走。
繪圖工作正常,但我的圓圈之間的時間延遲不起作用。 我可以看到倒計時(使用print
),但在倒計時結束之前它不會繪制任何東西。
可能這與 object 的創建有關? 在 object 完成創建之前什么都沒有發生? 身份證。
這是我的代碼:
import tkinter as tk
import time
root = tk.Tk()
size = 1000
myCanvas = tk.Canvas(root, bg="white", height=size, width=size)
# draw circle
class Circle:
def __init__(self, rt, dia, color, x=0, y=0):
self.rt = rt
self.dia = dia
self.color = color
self.x = x # center cord x
self.y = y # center cord y
def draw_circle(self):
r = self.dia / 2
up_left = (self.x - r, self.y + r)
low_right = (self.x + r, self.y - r)
cord = up_left + low_right
self.rt.create_oval(cord, fill=self.color, outline="")
coord2 = 0, 300, 300, 0
#arc = myCanvas.create_oval(coord2, fill="blue")
def PickColor(r, g, b):
r = r % 250
g = g % 250
b = b % 250
return('#%02x%02x%02x' % (r, g, b))
class ConcentricCircles:
def __init__(self, rt, quantity):
self.rt = rt
self.quantity = quantity
def draw_circles(self):
q = self.quantity
circles = []
i = 0
for c in range(q, 1, -1):
time.sleep(0.005)
incr = size/(1.5*q-0.001*c*c*c)
print(c)
circles += [Circle(self.rt, incr*c, PickColor(110, 15*c^3-c^2, 300*c^5-c^4), size/2, size/2)]
circles[i].draw_circle()
i += 1
self.rt.pack()
a = ConcentricCircles(myCanvas, 30).draw_circles()
root.mainloop()
這是它的畫法:
當您使用sleep()
function 時,應用程序會暫停對 GUI 的更新。 這意味着畫圓也被暫停。 但是您可以強制應用程序在繼續使用update_idletasks()
之前更新 GUI,請參見下面的示例。 我選擇在Circle.draw_circle()
function 中進行更新:
def draw_circle(self):
r = self.dia / 2
up_left = (self.x - r, self.y + r)
low_right = (self.x + r, self.y - r)
cord = up_left + low_right
self.rt.create_oval(cord, fill=self.color, outline="")
self.rt.update_idletasks() # Updates the canvas
當您使用sleep()
時,應用程序一直處於忙碌狀態。 您可能想研究after()
function 調度 function 調用但不鎖定應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.