python ——钟表
1、表盘
from turtle import *
from datetime import * def Skip(step):#表盘不连续地画图
penup()
forward(step)
pendown() def SetupClock(radius):
#建立表的外框
reset()
pensize(7)
for i in range(60):
Skip(radius)#跨越中间这段不画
if i % 5 == 0:
forward(20)
Skip(-radius-20)#抬起画笔,回到原处
else:
dot(5)
Skip(-radius)#抬起画笔,回到圆心
right(6)#回到圆心,方向旋转6度 SetupClock(160)

2、添加指针
from turtle import *
from datetime import * def Skip(step):#表盘不连续地画图
penup()
forward(step)
pendown() def mkHand(name, length):
#注册Turtle形状,建立表针Turtle
#清空窗口,重置默认值
Skip(-length*0.1)#先回一点
begin_poly()#初始点
forward(length*1.1)
end_poly()#结束点
handForm = get_poly()#返回最后记录的多边形
register_shape(name, handForm)#寄存器形状,安装相应的多边形
goto(0,0) def Init():
global secHand, minHand, hurHand, printer
mode("logo")# 重置Turtle指向北 #建立三个表针Turtle并初始化
mkHand("secHand", 125)
right(30)
mkHand("minHand", 110)
right(30)
mkHand("hurHand", 90) secHand = Turtle()
secHand.shape("secHand")
minHand = Turtle()
minHand.shape("minHand")
hurHand = Turtle()
hurHand.shape("hurHand") for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0) #建立输出文字Turtle
printer = Turtle()
printer.hideturtle()
printer.penup() #画表框
def SetupClock(radius):
#建立表的外框
reset()
pensize(7)
for i in range(60):
Skip(radius)#跨越中间这段不画
if i % 5 == 0:
forward(20)
Skip(-radius-20)#抬起画笔,回到原处
else:
dot(5)
Skip(-radius)#抬起画笔,回到圆心
right(6)#回到圆心,方向旋转6度 Init()
tracer(False)
SetupClock(160)

3、时间
from datetime import *
from turtle import * #时分秒
t = datetime.today()
print(t)
print(t.microsecond)
print(t.second)
second = t.second + t.microsecond*0.000001
minute = t.minute + second/60.0
hour = t.hour + minute/60.0 #星期
print(t.weekday())
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
print(week[t.weekday()]) #年月日
y = t.year
m = t.month
d = t.day
# return "%s %d %d" % (y, m, d)
print(y,"-",m,"-",d) tracer(False)
mode("logo")# 重置Turtle指向北
printer = Turtle()
printer.forward(65)
printer.write(week[t.weekday()], align="center",font=("Courier", 14, "bold"))#日期标在图中
printer.back(130)
printer.write("%d-%d-%d"%(y,m,d),align="center",font=("Courier", 14, "bold"))#日期标在图中


from datetime import *
from turtle import * #时分秒
t = datetime.today()
print(t)
print(t.microsecond)
print(t.second)
second = t.second + t.microsecond*0.000001
minute = t.minute + second/60.0
hour = t.hour + minute/60.0 #星期
print(t.weekday())
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
print(week[t.weekday()]) #年月日
y = t.year
m = t.month
d = t.day
# return "%s %d %d" % (y, m, d)
print(y,"-",m,"-",d) tracer(False)
mode("logo")# 重置Turtle指向北
printer = Turtle()
printer.hideturtle()
printer.penup()#提起画笔,便没了那两道轨迹
printer.forward(65)
printer.write(week[t.weekday()], align="center",font=("Courier", 14, "bold"))#日期标在图中
printer.back(130)
printer.write("%s-%d-%d"%(y,m,d),align="center",font=("Courier", 14, "bold"))#日期标在图中
printer.home()
tracer(True)

from datetime import *
from turtle import * def Skip(step):#表盘不连续地画图
penup()
forward(step)
pendown() def mkHand(name, length):
#注册Turtle形状,建立表针Turtle
#清空窗口,重置默认值
Skip(-length*0.1)#先回一点
begin_poly()#初始点
forward(length*1.1)
end_poly()#结束点
handForm = get_poly()#返回最后记录的多边形
register_shape(name, handForm)#寄存器形状,安装相应的多边形
goto(0,0) def Init():
global secHand, minHand, hurHand, printer
mode("logo")# 重置Turtle指向北
right(90)
#建立三个表针Turtle并初始化
mkHand("secHand", 125)
right(30)
mkHand("minHand", 110)
right(30)
mkHand("hurHand", 90) secHand = Turtle()
secHand.shape("secHand")
minHand = Turtle()
minHand.shape("minHand")
hurHand = Turtle()
hurHand.shape("hurHand") for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0) #建立输出文字Turtle
printer = Turtle()
printer.hideturtle()
printer.penup() #画表框
def SetupClock(radius):
#建立表的外框
reset()
pensize(7)
for i in range(60):
Skip(radius)#跨越中间这段不画
if i % 5 == 0:
forward(20)
Skip(-radius-20)#抬起画笔,回到原处
else:
dot(5)
Skip(-radius)#抬起画笔,回到圆心
right(6)#回到圆心,方向旋转6度 tracer(False)
Init()
SetupClock(160)
tracer(True) #时分秒
t = datetime.today()
print(t)
print(t.microsecond)
print(t.second)
second = t.second + t.microsecond*0.000001
minute = t.minute + second/60.0
hour = t.hour + minute/60.0 #星期
print(t.weekday())
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
print(week[t.weekday()]) #年月日
y = t.year
m = t.month
d = t.day
# return "%s %d %d" % (y, m, d)
print(y,"-",m,"-",d) tracer(False)
#mode("logo")# 重置Turtle指向北
printer = Turtle()
printer.penup()
printer.hideturtle()
printer.forward(65)
printer.write(week[t.weekday()], align="center",font=("Courier", 14, "bold"))#日期标在图中
printer.back(130)
printer.write("%d-%d-%d"%(y,m,d), align="center",font=("Courier", 14, "bold"))#日期标在图中
tracer(True)

4、动态显示

将时间和角度对应起来,换算到角度,然后和指针对应起来
from turtle import *
from datetime import * def Skip(step):#表盘不连续地画图
penup()
forward(step)
pendown() def mkHand(name, length):
#注册Turtle形状,建立表针Turtle
reset()
Skip(-length*0.1)
begin_poly()#多边形第一个顶点
forward(length*1.1)
end_poly()
handForm = get_poly()
register_shape(name, handForm) def Init():
global secHand, minHand, hurHand, printer
mode("logo")# 重置Turtle指向北,为后续角度提供便利
#建立三个表针Turtle并初始化
mkHand("secHand", 125)
mkHand("minHand", 115)
mkHand("hurHand", 90)
secHand = Turtle()
secHand.shape("secHand")
minHand = Turtle()
minHand.shape("minHand")
hurHand = Turtle()
hurHand.shape("hurHand")
for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0)
#建立输出文字Turtle
printer = Turtle()
printer.hideturtle()
printer.penup() #画表框
def SetupClock(radius):
#建立表的外框
reset()
pensize(7)
for i in range(60):
Skip(radius)#跨越中间这段不画
if i % 5 == 0:
forward(20)
Skip(-radius-20)#抬起画笔,回到原处
else:
dot(5)
Skip(-radius)#抬起画笔,回到圆心
right(6)#回到圆心,方向旋转6度 def Week(t):
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
return week[t.weekday()] def Date(t):
y = t.year
m = t.month
d = t.day
return "%s %d %d" % (y, m, d) def Tick():
#绘制表针的动态显示
t = datetime.today()
second = t.second + t.microsecond*0.000001
minute = t.minute + second/60.0
hour = t.hour + minute/60.0
secHand.setheading(6*second)
minHand.setheading(6*minute)
hurHand.setheading(30*hour) tracer(False)
printer.forward(65)
printer.write(Week(t), align="center",
font=("Courier", 14, "bold"))
printer.back(130)
printer.write(Date(t), align="center",
font=("Courier", 14, "bold"))
printer.home() tracer(True) ontimer(Tick, 100)#100ms后继续调用tick def main():
tracer(False)#不刷新,最后一次刷新,省时间
Init()
SetupClock(160)
tracer(True)
Tick()
mainloop() if __name__ == "__main__":
main()

python ——钟表的更多相关文章
- 有限状态机(Python)
有限状态机(Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型.FSM是一种算法思想,简单而言,有限状 ...
- Python::OS 模块 -- 进程管理
os模块的简介参看 Python::OS 模块 -- 简介 os模块的文件相关操作参看 Python::OS 模块 -- 文件和目录操作 os模块的进程参数 Python::OS 模块 -- 进程参数 ...
- D14——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D14 20180919内容纲要: 1.html认识 2.常用标签 3.京东html 4.小结 5.练习(简易淘宝html) 1.html初识(HyperText ...
- tensorflow和python操作中的笔记
前一段时间做了一些项目,把一些笔记放在了txt中,现分享出来,自己也能够时长预习. 1) 读取文件时,将固定的文件地址,采用数组或者字符串的形式,提前表示出来,后期使用时候采用拼接操作 2) # 得到 ...
- 【python】列出http://www.cnblogs.com/xiandedanteng中所有博文的标题
代码: # 列出http://www.cnblogs.com/xiandedanteng中所有博文的标题 from bs4 import BeautifulSoup import requests u ...
- Python练手项目实例汇总(附源码下载)
今天给大家分享几个有趣的Python练手项目实例,希望对Python初学者有帮助哈~ 一.经典的俄罗斯方块 1. 绑定功能 1 # 绑定功能 2 class App(Frame): 3 def _ ...
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
随机推荐
- Eclipse+Mysql实现多条件查询
最近做一个项目的时候,就需要用到多条件查询,但是一直不完美,所有有bug,不过今天经高人提醒,做出了个小例子,在这里简单跟大家分享一下: 不说多了,直接放关键sql代码: 已知条件:菜名,菜品,价格区 ...
- js的Set和Map集合
目录 1.js的Set介绍 1-1.Set基础用法 1-2.Set对象的操作方法 1-3.Set对象的遍历方法 2.js的Set扩展WeakSet篇 3.js的Map介绍 3-1.Map基础用法 3- ...
- MyBatis 源码分析-项目总览
MyBatis 源码分析-项目总览 1.概述 本文主要大致介绍一下MyBatis的项目结构.引用参考资料<MyBatis技术内幕> 此外,https://mybatis.org/mybat ...
- django中CBV源码分析
前言:Django的视图处理方式有两种: FBV(function base views) 是在视图里基于函数形式处理请求. CBV(class base views)是在视图里基于类的形式处理请求. ...
- button控件根据文本自适应
2020-03-12 每日一例第5天 1.添加按钮1和label.textbox控件,并修改相应的text值: 2.修改textBox1的TextChanged事件并输入代码: button1.Tex ...
- vuex 业务使用
1 创建变量 cityVuex.js export default { state: { cityArr: [] }, mutations: { setCityArr (state, arr) { s ...
- isEmpty 判空函数 内部分别判断是 null 空数组 等
import { oneOf, isEmpty } from '@/libs/tools' export const isEmpty = (value) => { if (value == nu ...
- 网络安全从入门到精通(第一章-2)快速自建web安全测试环境
本文内容 动态语言 常见服务器脚本 动态语言可以做什么? 常见服务器环境快捷搭建软件 快速的搭网站的环境 CMS 1,动态语言:是对服务器行为的编程,这被称为服务器端脚本或服务器脚本. 2,常见服务器 ...
- 【Java】反射调用与面向对象结合使用产生的惊艳
缘起 我在看Spring的源码时,发现了一个隐藏的问题,就是父类方法(Method)在子类实例上的反射(Reflect)调用. 初次看到,感觉有些奇特,因为父类方法可能是抽象的或私有的,但我没有去怀疑 ...
- 配置GitLab或Git环境之教程
配置GitLab或Git环境之教程 1.安装好Git后,首先打开开始菜单的所有程序里面的git文件夹,打开Git Bash/ 2.弹出的命令行里面输入ssh-keygen 输入y,一直Enter ...