演示7:python钟表绘制

  • 介绍
    • 基础功能:
    • 万年历月份功能:
    • 万年历日期功能:
    • 万年历星期功能:
    • 样品展示
    • 知识
    • 源码

介绍

为学生演示而用,使用tkinter控件库实现。
其中使用time库控制绘制帧数,使用datetime获取相关时间数据,使用_thread来调用绘制函数。

基础功能:

  1. 秒针,每0.1秒跳动一次,每跳动一次旋转0.6度;
  2. 分针,每1秒跳动一次,每跳动一次旋转0.1度 ;
  3. 时针,每1秒跳动一次,每跳动一次旋转约0.0083度;

万年历月份功能:

  1. 指向当前月份的数字;

万年历日期功能:

  1. 指向当前日期的数字,部分数字用点代替;

万年历星期功能:

  1. 指向当前星期的英文缩写;

样品展示

知识

  1. Canvas 画布,属于tkinter库,可以在上面绘制各类图形
    tk,必要填入的窗口变量,表示该画布是要绘制在某个控件上面;
    width,必要填写的画布宽度;
    height,必要填写的画布敢赌;
  2. place,设置画布左上角的显示位置,其他控件通用;
  3. create_oval,绘制圆
    (x1,y1,x2,y2),x1与y1是圆所属的矩形左上角坐标,x2与y2是圆所属的矩形右下角坐标
    width,圆的边宽度
    outline,圆的边颜色
    fill,圆中间填充的颜色
  4. create_polygon,绘制多边形
    (x1,y1,x2,y2,x3,y3,…),填写每一个折点的坐标
    其他同绘制圆
  5. create_text,绘制文字
    (x,y),文字绘制的位置
    font,文字的字体与文字大小

源码

from tkinter import *
from time import *
from math import *
from datetime import datetime as da
import _thread as th
tk=Tk()
#窗口尺寸
tk.minsize(400,400)
tk.maxsize(400,400)
tk.title('仿江诗丹顿')
#画布
ca=Canvas(tk,width=400,height=400)
ca.place(x=0,y=0)#设置画布位置
def draw():ca.delete('all')#清空画布ca.create_oval((10,10,390,390),fill='#f9f9f9')ca.create_oval((20,20,380,380),width=6,outline='#777777')ca.create_oval((10,10,390,390),width=16,outline='#aaaaaa')#表盘文字ca.create_text((200,130),text='VACHERON CONSTANTIN',font=('Tahoma',10))ca.create_text((200,150),text='GENEVE',font=('Tahoma',10))#图标ca.create_polygon((200,92,210,87,190,117,200,112,210,117,190,87,200,92),fill='#ffeebb',outline='#ffeebb')ca.create_polygon((190,102,185,112,215,92,210,102,215,112,185,92,190,102),fill='#ffeebb',outline='#ffeebb')#圆点for i in range(60):if i%5!=0:ca.create_oval((196+cos(i*pi/30)*160,196-sin(i*pi/30)*160,204+cos(i*pi/30)*160,204-sin(i*pi/30)*160),fill='#ffeebb',outline='#ffffff')#长条for i in range(12):#if i%3!=0:ca.create_polygon((200+cos(i*pi/6-0.009)*170,200-sin(i*pi/6-0.009)*170,200+cos(i*pi/6+0.009)*170,200-sin(i*pi/6+0.009)*170,\200+cos(i*pi/6+0.009)*135,200-sin(i*pi/6+0.009)*135,200+cos(i*pi/6-0.009)*135,200-sin(i*pi/6-0.009)*135),fill='#ffeebb',outline='#ffeebb')#12点图案ca.create_polygon((200,28,205,33,200,36,195,33,200,28),fill='#ffeebb')ca.create_polygon((200,36,205,33,203,69,200,70,200,36),fill='#f1e0ad')ca.create_polygon((200,36,195,33,197,69,200,70,200,36),fill='#eadaaa')#6点图案ca.create_polygon((200,372,205,367,200,364,195,367,200,372),fill='#ffeebb')ca.create_polygon((200,364,205,367,203,331,200,330,200,364),fill='#eadaaa')ca.create_polygon((200,364,195,367,197,331,200,330,200,364),fill='#f1e0ad')#9点图案ca.create_polygon((28,200,33,205,36,200,33,195,28,200),fill='#ffeebb')ca.create_polygon((36,200,33,205,69,203,70,200,36,200),fill='#f1e0ad')ca.create_polygon((36,200,33,195,69,197,70,200,36,200),fill='#eadaaa')#3点图案ca.create_polygon((372,200,367,205,364,200,367,195,372,200),fill='#ffeebb')ca.create_polygon((364,200,367,205,331,203,330,200,364,200),fill='#eadaaa')ca.create_polygon((364,200,367,195,331,197,330,200,364,200),fill='#f1e0ad')#中心圈ca.create_oval((188,188,212,212),fill='#eedd99',outline='#eedd99')#星期ca.create_oval((160,230,240,310),outline='#eeeeee',fill='#fefefe')ca.create_text((200+cos(pi/3.5*2)*30,270-sin(pi/3.5*2)*30),text='SUN',font=('Tahoma',6),fill='#888888')ca.create_text((200+cos(pi/3.5)*30,270-sin(pi/3.5)*30),text='MON',font=('Tahoma',6),fill='#888888')ca.create_text((200+cos(pi/3.5*7)*30,270-sin(pi/3.5*7)*30),text='TUE',font=('Tahoma',6),fill='#888888')ca.create_text((200+cos(pi/3.5*6)*30,270-sin(pi/3.5*6)*30),text='WED',font=('Tahoma',6),fill='#888888')ca.create_text((200+cos(pi/3.5*5)*30,270-sin(pi/3.5*5)*30),text='THU',font=('Tahoma',6),fill='#888888')ca.create_text((200+cos(pi/3.5*4)*30,270-sin(pi/3.5*4)*30),text='FRI',font=('Tahoma',6),fill='#888888')ca.create_text((200+cos(pi/3.5*3)*30,270-sin(pi/3.5*3)*30),text='SAT',font=('Tahoma',6),fill='#888888')ca.create_oval((195,265,205,275),fill='#cccccc',outline='#cccccc')#月ca.create_oval((90,170,170,250),outline='#eeeeee',fill='#fefefe')for i in range(12):ca.create_text((130+cos(pi/6*(i+1)-pi/2)*32,210+sin(pi/6*(i+1)-pi/2)*32),text=str(i+1),font=('Tahoma',6),fill='#888888')ca.create_oval((125,205,135,215),fill='#cccccc',outline='#cccccc')#日ca.create_oval((230,170,310,250),outline='#eeeeee',fill='#fefefe')for i in range(31):if i%2==1 and i!=31:ca.create_text((270+cos(pi/15.5*(i+1)-pi/2)*33,210+sin(pi/15.5*(i+1)-pi/2)*33),text=str(i+1),font=('Tahoma',4),fill='#888888')else:ca.create_oval((269+cos(pi/15.5*(i+1)-pi/2)*32,209+sin(pi/15.5*(i+1)-pi/2)*32,\271+cos(pi/15.5*(i+1)-pi/2)*32,211+sin(pi/15.5*(i+1)-pi/2)*32),outline="#888888",fill='#888888')ca.create_oval((265,205,275,215),fill='#cccccc',outline='#cccccc')
def draw2():#时间数据ti=localtime(time())#各指针角度sec=(ti[5]+time()%1)*pi/30-pi/2minn=(ti[4]+ti[5]/60)*pi/30-pi/2hou=(ti[3]+(ti[4]*60+ti[5])/3600)*pi/6-pi/2week=(-1+da.now().weekday())*(pi/3.5)mon=(ti[1]-3)*(pi/6)day=(ti[2]-8)*(pi/15.5)#周(星期几)针绘制we=ca.create_polygon((200+cos(week)*25,270+sin(week)*25,\200+cos(week+0.08)*20,270+sin(week+0.08)*20,\200+cos(week+0.15)*6,270+sin(week+0.15)*6,\200+cos(week-0.15)*6,270+sin(week-0.15)*6,\200+cos(week-0.08)*20,270+sin(week-0.08)*20),fill='#cccccc',outline='#cccccc')wq=ca.create_oval((198,268,202,272),fill='#999999',outline='#999999')#月针绘制mo=ca.create_polygon((130+cos(mon)*25,210+sin(mon)*25,\130+cos(mon+0.08)*20,210+sin(mon+0.08)*20,\130+cos(mon+0.15)*6,210+sin(mon+0.15)*6,\130+cos(mon-0.15)*6,210+sin(mon-0.15)*6,\130+cos(mon-0.08)*20,210+sin(mon-0.08)*20),fill='#cccccc',outline='#cccccc')ww=ca.create_oval((128,208,132,212),fill='#999999',outline='#999999')#日针绘制dy=ca.create_polygon((270+cos(day)*25,210+sin(day)*25,\270+cos(day+0.08)*20,210+sin(day+0.08)*20,\270+cos(day+0.15)*6,210+sin(day+0.15)*6,\270+cos(day-0.15)*6,210+sin(day-0.15)*6,\270+cos(day-0.08)*20,210+sin(day-0.08)*20),fill='#cccccc',outline='#cccccc')wr=ca.create_oval((268,208,272,212),fill='#999999',outline='#999999')#时针绘制ho=ca.create_polygon((200+cos(hou)*110,200+sin(hou)*110,\200+cos(hou+0.04)*90,200+sin(hou+0.04)*90,\200+cos(hou+0.15)*10,200+sin(hou+0.15)*10,\200+cos(hou-0.15)*10,200+sin(hou-0.15)*10,\200+cos(hou-0.04)*90,200+sin(hou-0.04)*90),fill='#eedd99',outline='#eedd99')#分针绘制mi=ca.create_polygon((200+cos(minn)*110,200+sin(minn)*130,\200+cos(minn+0.025)*90,200+sin(minn+0.025)*110,\200+cos(minn+0.1)*10,200+sin(minn+0.1)*10,\200+cos(minn-0.1)*10,200+sin(minn-0.1)*10,\200+cos(minn-0.025)*90,200+sin(minn-0.025)*110),fill='#eedd99',outline='#eedd99')#秒针绘制se=ca.create_polygon((200+cos(sec)*150,200+sin(sec)*150,\200+cos(sec+0.003)*140,200+sin(sec+0.003)*140,\200+cos(sec+0.003)*(-50),200+sin(sec+0.003)*(-50),\200+cos(sec-0.003)*(-50),200+sin(sec-0.003)*(-50),\200+cos(sec-0.003)*140,200+sin(sec-0.003)*140),fill='#eedd99',outline='#eedd99')qw=ca.create_oval((198,198,202,202),fill='#888888',outline='#888888')sleep(0.1)#休眠0.1秒#删除各指针ca.delete(we)ca.delete(wq)ca.delete(se)ca.delete(mi)ca.delete(ho)ca.delete(qw)ca.delete(mo)ca.delete(ww)ca.delete(dy)ca.delete(wr)th.start_new_thread(draw2,())
draw()
th.start_new_thread(draw2,())
mainloop()

演示7:python钟表绘制相关推荐

  1. python如何做散点图-matplotlib在python上绘制3D散点图实例详解

    大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...

  2. python画三维温度散点图-matplotlib在python上绘制3D散点图实例详解

    大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...

  3. python绘制散点图-matplotlib在python上绘制3D散点图实例详解

    大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...

  4. 每日一练:Python代码绘制航海王草帽路飞,打饭阿姨也能跟着学会的Turtle海龟绘图系列

    Turtle 海龟绘图系列 - Python 代码绘制航海王草帽路飞 第一章:程序运行 ① 效果展示 - 轮廓描绘 ② 效果展示 - 颜色填充 第二章:实现过程 ① 绘图数据下载 ② 海龟绘图配置项 ...

  5. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Menu的Command)

    Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Menu的Command) 目录 tkinter应用案例 1.添加菜单栏组件 2.tkinter应用案例:添 ...

  6. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Canvas)

    Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Canvas) 导读 动态演示调用python库的tkinter带你进入GUI世界(Canvas) 目录 t ...

  7. python绘制3d坐标轴_matplotlib在python上绘制3D散点图实例详解

    大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...

  8. Python matplotlib绘制雷达图

    Python matplotlib绘制雷达图 本篇文章介绍使用matplotlib绘制雷达图. 雷达图也被称为网络图,蜘蛛图,星图,蜘蛛网图,是一个不规则的多边形.雷达图可以形象地展示相同事物的多维指 ...

  9. 使用Python+pillow绘制矩阵盖尔圆

    盖尔圆是矩阵特征值估计时常用的方法之一,其定义为: 与盖尔圆有关的两个定理为: 定理1:矩阵A的所有特征值均落在它的所有盖尔圆的并集之中. 定理2:将矩阵A的全体盖尔圆的并集按连通部分分成若干个子集, ...

最新文章

  1. Dubbo 管理能力弱?Dubbo Admin 发布 v0.1 助力服务管理能力!
  2. android studio串号,AndroidStudio使用常见问题集锦
  3. python实现rsa加密源代码_python实现RSA加密(解密)算法
  4. oracle语句借书,Oracle SQL题目及其解答(借书卡、图书、借书记录)
  5. C#中找不到MouseWheel事件的解决办法
  6. Oracle备份还原
  7. 【Java】JDK8新特性之函数式接口
  8. html一个页面分页代码怎么写,纯JS前端实现分页代码
  9. 计算机域名DNS设置,电脑的IP地址和DNS域名服务器如何设置
  10. 【转】WPF/Silverlight开发的15个最佳实践
  11. 学习总结 for循环语句的应用
  12. 搜索引擎Elasticsearch,这篇文章给讲透了(建议收藏)
  13. 麻省理工线性代数第二讲
  14. 有关初始位置检测,死区补偿,弱磁,MTPA,Foc保护措施,参数辨别的一些文档,和参考代码。
  15. 联想启天M4880(老机)安装Centos7安装总结
  16. FIRST 和 FOLLOW求解
  17. android11原生录屏,终于把安卓这项功能实现了!iOS 11录屏功能演示:超好用
  18. 基于ARMv8架构的mini操作系统
  19. 文献解读|生物炭和细菌接种生物炭增强了污染土壤中镉和铜的固定化和酶活性
  20. 修改系统时区(基于Debian的系统)--用Enki学Linux系列(15)

热门文章

  1. sdcms_php_web,SDCMS通杀漏洞
  2. 京东一小伙一年输出20篇专利,其实你也可以
  3. Linux应急处置/信息搜集/漏洞检测工具---附脚本下载
  4. lcd屏幕有mipi接口吗_LCD屏幕MIPI接口和LVDS接口之间的区别(摘要)
  5. Linux系统启动管理
  6. mondrian mysql 实例_mondrian 导入demo数据到mysql
  7. 吉里吉里2中TJS2 VM的dispatch loop
  8. 漏洞挖掘 符号执行_漏洞挖掘新思路:fuzz+符号执行——driller
  9. java开源框架总结
  10. 万字综述:行业知识图谱构建最新进展