tkinter.Canvas.create_xxx()没有直接定义画圆的函数,可以用等轴的椭圆或360度的弧形代替。本例中用画椭圆函数创建一个以圆心坐标x,y和半径r为自变量的画圆函数 Circle(x,y,r,color) ;用它模仿画圆环,叠加很多圆,它们的圆心都在另一圆周上,定圆和动圆的半径以及动圆的稀密程序随机变化:
import tkinter as tk import pyautogui as ag from random import * from time import sleep as Delay from math import sin from math import cos from math import pi from numpy import arange as np def Window_Open(W, H): X, Y = ag.size() winSize = str(W)+"x"+str(H) winPos = winSize + "+" + str((X - W) // 2) winPos += "+" + str((Y - H) // 2) win.geometry(winPos) win.resizable(False, False) title = u'桌面分辨率:' + str(X) + "x" + str(Y) title += ' ' * 5 + u'窗体大小:' + winSize win.title(title) win.update() def Circle(x,y,r,c='black'): coord=x-r,y-r,x+r,y+r tCanvas.create_oval(coord,outline=c) rand = lambda a,b:(random()*(a+1))+b if __name__ == '__main__': win = tk.Tk() Window_Open(480,480) tCanvas = tk.Canvas(win, width=win.winfo_width(), height=480, bg='white') tCanvas.pack(side="top") c_txt=tCanvas.create_text((225, 240),text='',anchor=tk.W, font=("宋体",20)) Color = ['red','blue','green','magenta','navy','lawngreen','orange'] I=20 for i in range(1,I+1): R=rand(60,80) r=rand(30,50) step = rand(1,15)*pi/1080 for t in np(-pi,pi,step): x = 240+R*cos(t) y = 220+R*sin(t) c = choice(Color) Circle(x,y,r,c) tCanvas.update() Delay(0.5) if i!=I:tCanvas.delete("all") tCanvas.create_text((225, 450),text='End!',anchor=tk.W, font=("宋体",20)) win.mainloop()
效果图: