Python简单几步画个钻石戒指
作者:清远小阮 发布时间:2023-04-26 13:59:27
标签:Python,钻石,戒指
一、效果演示
二、制作步骤/过程
(一)绘制戒指
使用tkinter的canvas画布绘制8个点,然后把这8个点使用canvas.create_line()划线函数用直线连接起来形成钻石形状。为了增强效果让钻石旋转起来,使用while循环,每隔一段时间重新绘制钻石,但绘制的起始角度偏转11.25度,这样运行程序钻石看上去就旋转起来了。
绘制好钻石后,再使用canvas.create_oval()绘制两个椭圆作为戒指环就可以了。
(二)绘制雪花
只有戒指单调了一点,来给画布添加点雪花。这里使用random.randint()函数每隔一段时间随机绘制50个10px大小的白色正方形,并绘制在画布上,这里看起来就好多了。这里绘制正方形使用到了canvas.create_rectangle()函数。
三、完整源代码文件
import time,random,math
from tkinter import Tk, Canvas
# 打开窗口
def open_window():
_root = Tk()
_root.title("七夕,用Python给你送个钻石戒指")
_root.config(bg='black')
# 设置画板
_canvas = Canvas(_root, width=640, height=380, bg='black')
_canvas.pack()
# 待窗口创建后,2秒后执行动画
_root.after(2000, paint_canvas(_root, _canvas))
_root.mainloop()
# 启动动画函数
def paint_canvas(_tk, _canvas):
# 设置钻石开始角度
_start_angle = 0
# 设置存放钻石八个点x,y坐标的列表
_list_x, _list_y = [], []
# 设置钻石八个点之间的角度_angel,钻石中心点x,y坐标_x_center,_y_center,钻石半径_r
_angle, _x_center, _y_center, _r = 30, 320, 120, 50
while True:
# 清空画板
_canvas.delete("all")
# 画戒指
paint_ring(_canvas, _start_angle, _angle, _x_center, _y_center, _r, _list_x, _list_y)
_list_x.clear()
_list_y.clear()
# 从新计算钻石开始角度
_start_angle = (_start_angle + 11.25) % 360
# 画星星
paint_star(_canvas)
# 动画刷新时间间隔
time.sleep(0.05)
_canvas.update()
_tk.update()
# 画戒指函数
def paint_ring(_canvas, _start_angle, _angle, _x_center, _y_center, _r, _list_x, _list_y):
_canvas.create_oval(180, 110, 460, 280, outline='white')
_canvas.create_oval(190, 130, 450, 275, outline='white')
for i in range(12):
_list_x.append(_x_center + _r * math.cos((_start_angle + (_angle * i)) * math.pi / 180))
_list_y.append(_y_center + _r * math.sin((_start_angle + (_angle * i)) * math.pi / 180))
for i in range(12):
for j in range(12):
_canvas.create_line(_list_x[i], _list_y[i], _list_x[j], _list_y[j], fill='white')
# 画雪花函数
def paint_star(_canvas):
# 随机生成不超过画布长、宽的50个正方形点
for i in range(50):
x = random.randint(0, 630)
y = random.randint(0, 370)
_canvas.create_rectangle(x, y, x + 5, y + 5, fill='white')
if __name__ == '__main__':
# 打开程序窗口
open_window()
来源:https://blog.csdn.net/qq616491978/article/details/126159742


猜你喜欢
- 最好的学习方式就是实践。 我们通过导入gin包来深入学习。环境go 1.13.5goland 2019.3.1manjaro-gnome3.
- 本文使用案例是基于 python2.7 实现以下内容均为个人使用 peewee 的经验和遇到的坑,不会涉及过多的基本操作。所以,没有使用过
- 本文实例讲述了python调用机器喇叭发出蜂鸣声(Beep)的方法。分享给大家供大家参考。具体分析如下:下面这段python代码可调用机器喇
- DateDiff 函数描述 返回两个日期之间的时间间隔。 语法 DateDiff(interval, date1, date2 [,firs
- 原始需求:例如有一个列表:l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]希望把它转换成下面这种形式:[1, 2,
- ASP开发中有用的函数(function)集合,挺有用的,请大家保留!'******************************
- 求英文字母、数字、下划线、汉字的js正则表达式英文字母或数字或下划线,英文字母数字下划线是:/^\w+$/汉字的是:/^[\u0391-\u
- 从接触Python以来,一直都是采用 virtualenv 和 virtualenvwrapper 来管理不同项目的依赖环境,通过 work
- 写的dht协议搜索的程序,这几天优化了一下发现速度确实快了好多。但是出现了一个新的问题,内存直接飙升,我开了十个爬虫占用内存800m。开始我
- 一般数据库默认是10次尝试失败后锁住用户 1、查看FAILED_LOGIN_ATTEMPTS的值selec
- 本文实例讲述了Python中itertools模块用法,分享给大家供大家参考。具体分析如下:一般来说,itertools模块包含创建有效迭代
- 废话不多说,直接上官网demopackage mainimport ("log""github.com/fsn
- 本文回答了如下问题:“MySQL服务器有多稳定?”,以及“在本项目中我能依靠My
- ktime 开始时间串 dtime 到期时间串 jmonth 付费间隔月份数 可选(1,3,6,12) 需要 按月查询数据 比如说 ktim
- 语言是信息传播的主要障碍。多语言网站,顾名思义就是能够以多种语言(而不是单种语言)为用户提供信息服务,让使用不同语言的用户都能够从同个网站获
- 如下所示:import cv2import osimport numpy as nproot_path = "I:/Images/
- 本文实例讲述了Python迭代器与生成器基本用法。分享给大家供大家参考,具体如下:迭代器可以进行for循环的数据类型包括以下两种:1. 集合
- 表单校验是页面开发中非常常见的一类需求,相信每个前端开发人员都有这方面的经验。网上有很多成熟的表单校验框架,虽然按照它们默认的设计,用起来没
- mssql 错误日志文件存放位置:C:\Program Files\Microsoft SQL Server\MSSQL\LOG 用记事本查
- 一看,C盘只有不到2M可用空间,一查原因,sqlserver安装路径下的log目录文件占了好大,5G多, 于是上网搜了下,解决了: 把与sq