python +t kinter繪制彩虹和云朵
彩虹,簡稱虹,是氣象中的一種光學現象,當太陽光照射到半空中的水滴,光線被折射及反射,在天空上形成拱形的七彩光譜,由外圈至內圈呈紅、橙、黃、綠、藍、靛、紫七種顏色。事實上彩虹有無數種顏色,比如,在紅色和橙色之間還有許多種細微差別的顏色,但為了簡便起見,所以只用七種顏色作為區別。
先給出運行效果:
源碼如下:
import tkinter as tk# 創建主窗口
root = tk.Tk()
root.title("彩虹")
root.geometry("400x300")# 創建畫布
canvas = tk.Canvas(root, width=400, height=300, bg="#87CEEB") # 天藍色背景
canvas.pack()# 繪制彩虹
def draw_rainbow():center_x = 200 # 畫布中心 Xcenter_y = 320 # 調整 Y 值使彩虹靠下radius = 240 # 彩虹半徑# 彩虹顏色colors = ['#FF0000', # 紅'#FF7F00', # 橙'#FFFF00', # 黃'#00FF00', # 綠'#0000FF', # 藍'#4B0082', # 靛'#9400D3' # 紫]# 繪制彩虹弧線for i in range(len(colors)):canvas.create_arc(center_x - (radius - i * 20), center_y - (radius - i * 20),center_x + (radius - i * 20), center_y + (radius - i * 20),start=0, extent=180, outline=colors[i], width=20, style=tk.ARC)#繪制云朵
def draw_cloud(x, y, size):canvas.create_oval(x, y, x + size *2, y + size, fill="white", outline="white")canvas.create_oval(x + size //2, y - size //2, x + size *2.5, y + size //2, fill="white", outline="white")#繪制彩虹
draw_rainbow()#繪制云朵
draw_cloud(50, 50, 30) #左側云朵
draw_cloud(250, 80, 25) #右側云朵#運行主循環
root.mainloop()
下免修改云彩代碼,讓云彩從左向右不停地移動,先給出運行效果:
源碼如下:
import tkinter as tk# 創建主窗口
root = tk.Tk()
root.title("彩虹")
root.geometry("400x300")# 創建畫布
canvas = tk.Canvas(root, width=400, height=300, bg="#87CEEB") # 天藍色背景
canvas.pack()# 繪制彩虹
def draw_rainbow():center_x = 200 # 畫布中心 Xcenter_y = 320 # 調整 Y 值使彩虹靠下radius = 240 # 彩虹半徑# 彩虹顏色colors = ['#FF0000', # 紅'#FF7F00', # 橙'#FFFF00', # 黃'#00FF00', # 綠'#0000FF', # 藍'#4B0082', # 靛'#9400D3' # 紫]# 繪制彩虹弧線for i in range(len(colors)):canvas.create_arc(center_x - (radius - i *20), center_y - (radius - i *20),center_x + (radius - i *20), center_y + (radius - i *20),start=0, extent=180, outline=colors[i], width=20, style=tk.ARC)#繪制云朵
def draw_cloud(x, y, size):cloud_part1 = canvas.create_oval(x, y, x + size *2, y + size, fill="white", outline="white")cloud_part2 = canvas.create_oval(x + size //2, y - size //2, x + size *2.5, y + size //2, fill="white", outline="white")return [cloud_part1, cloud_part2] #返回兩個橢圓的ID列表#云朵移動函數
def move_cloud(cloud_parts, speed):for part in cloud_parts: #遍歷云朵的每個部分coords = canvas.coords(part)#如果云朵移出畫布右側邊界,則將其重新放置到左側if coords[2] >400 + 50: canvas.move(part,-450,0) #移動云朵的當前部分canvas.move(part,speed,0)#每隔50毫秒調用一次move_cloud函數,形成動畫效果root.after(50,move_cloud,cloud_parts,speed)#繪制彩虹
draw_rainbow()#繪制云朵并獲取其ID列表(用于移動)
cloud1 = draw_cloud(50,50,30) #左側云朵
cloud2 = draw_cloud(250,80,25) #右側云朵#啟動云朵移動動畫(速度為3)
move_cloud(cloud1,3)
move_cloud(cloud2,3) #運行主循環
root.mainloop()
OK!