当前位置: 首页 > article >正文

python +tkinter绘制彩虹和云朵

python +tkinter绘制彩虹和云朵

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

先给出运行效果:

源码如下:

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()

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

源码如下:

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!


http://www.kler.cn/a/466847.html

相关文章:

  • 2025年股指期货每月什么时候交割?
  • 探索光耦:光耦在风力发电中的应用——保障绿色能源的高效与安全
  • ubuntu16 重启之后lvm信息丢失故障恢复
  • Eureka 介绍与原理详解
  • 记录:导出功能:接收文件流数据进行导出(vue3)
  • Jdk动态代理源码缓存优化比较(JDK17比JDK8)
  • 推荐一些关于C#中LINQ的学习资料
  • Qt窗口获取Tftpd32_svc服务下载信息
  • [redux] ts声明useSelector和useDispatch
  • 嵌入式 Linux LED 驱动开发实验
  • 运维工具汇总
  • 【数据分析实战】24年T4某二手车交易平台数据分析
  • 【机器学习】【朴素贝叶斯分类器】从理论到实践:朴素贝叶斯分类器在垃圾短信过滤中的应用
  • 【数据库】简答题汇总
  • 力扣28找出字符串中第一个匹配项的下标
  • PyTorch中的__init__.pyi文件:作用与C++实现关系解析
  • 《探秘开源大模型:AI 世界的“超级引擎”》
  • Github 2024-12-30 开源项目周报 Top15
  • Chrome浏览器实例的TypeScript自动化脚本
  • Uniapp跨域请求