python +tkinter绘制彩虹和云朵

python +tkinter绘制彩虹和云朵

彩虹,简称虹,是气象中的一种光学现象,当太阳光照射到半空中的水滴,光线被折射及反射,在天空上形成拱形的七彩光谱,由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实上彩虹有无数种颜色,比如,在红色和橙色之间还有许多种细微差别的颜色,但为了简便起见,所以只用七种颜色作为区别。

先给出运行效果:

源码如下:

python 复制代码
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  # 画布中心 X
    center_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()

下免修改云彩代码,让云彩从左向右不停地移动,先给出运行效果:

源码如下:

python 复制代码
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  # 画布中心 X
    center_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!

相关推荐
程高兴9 分钟前
中性点不接地系统单相接地故障Matlab仿真
开发语言·matlab
AI很强13 分钟前
matlab常见的配图代码实现1
开发语言·算法·matlab
鲤籽鲲34 分钟前
C# Enumerable类 之 数据排序
开发语言·c#·c# 知识捡漏
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧34 分钟前
C语言_数据结构总结6:链式栈
c语言·开发语言·数据结构·算法·链表·visualstudio·visual studio
IT猿手1 小时前
2025最新群智能优化算法:云漂移优化(Cloud Drift Optimization,CDO)算法求解23个经典函数测试集,MATLAB
开发语言·数据库·算法·数学建模·matlab·机器人
至暗时刻darkest1 小时前
go mod文件 项目版本管理
开发语言·后端·golang
databook1 小时前
manim边学边做--线性变换的场景类
python·动效
AmazingKO1 小时前
【够用就好008】开新坑自学esb32烧录进军物联网和嵌入式
人工智能·python·物联网·chatgpt·github·方方上土·aigc创意人竹相左边
rocksun1 小时前
UNITTEST: PYTHON开发者内置的安全网
python
sakoba1 小时前
spring IOC(实现原理)
java·开发语言