神奇时钟

程序说明

程序的文件名称为Clock.py,程序除了要用到前两个项目已经熟悉的Python语言功能之外,还要使用SimpleGUITk来在画布中绘制文字和图像,并通过SimpleGUITk的计时器定期更新画布中的文字和图像。

通过该项目你可以获得以下能力:

了解Python处理日期时间的技巧
了解simpleguitk绘制文字和图像的功能
理解时间事件的工作原理
增强逻辑思维能力
培养解决问题的能力

编码步骤

我们已经为该小项目提供了一个基本模板,我们建议 “时钟”游戏的开发策略为:
1、确定一组存储游戏状态的全局变量。显而易见,你需要两个全局变量来保存数显要使用的日期字符串(格式为:XXXX年XX月XX日)、时间字符串(格式为: XX时XX分XX秒X)、三个全局变量来保存决定时针、分针、秒针位置的小时(或对应的角度)、分(或对应的角度)、秒(或对应的角度),也许还需要其它一些全局变量标志按钮的状态等。

2、查看datetime模块包中的now()函数,该函数会返回一个datetime对象,其中包含我们关心的所有信息,包括系统时钟所决定的年、月、日、时、分、秒、微秒等。

3、编写get_time()函数,在该函数中调用datetime.now(),然后对日期、时间、角度等全局变量进行计算和处理。

4、编写时钟事件的处理函数tick(),在该函数中根据游戏状态(玩家整秒时刻点击“关闭音乐”是否成功)调用get_time()函数来定期更新重要的全局变量。

5、依次双击打开本项目的images子文件夹中保存的Clock.jpg、Hour.png、Minute.png、Second.png四个图像文件,它们分别表示表门、时针、分针和秒针,注意观察这些图像的尺寸。

6、编写刷新屏幕事件处理函数draw(canvas),利用simpleguitk模块包在画布中先绘制表门,再根据游戏状态绘制数显文字,然后绘制时针、分针和秒针。注意,时针、分针和秒针的旋转角度由相关的全局变量控制。

7、定义按钮“开启数显”的事件处理函数toggle_display_digit(),注意这是一个开关按钮。

8、定义按钮“播放音乐”的事件处理函数toggle_music_play (),注意这是一个开关按钮。

9、创建窗口。

10、注册事件处理器,注意时间事件处理函数tick()每0.1秒调用1次。

11、启动时钟。

12、调用获取日期时间函数。

13、启动窗口。

项目模板

# "时钟"游戏小项目程序模板import simpleguitk as gui
import math
from datetime import datetime# 定义全局变量# 加载图像资源
clock_face = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project3/ClockFace.jpg")
hour = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project3//Hour.png")
minute = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project3/Minute.png")
second = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project3//Second.png")
# 加载并设置音乐资源
music_box = gui.load_sound("http://202.201.225.74/video/PythonResoure/ProjectResource/sounds/project3/music_box.ogg")
music_box.set_volume(0.5)def get_time():"""定义获取日期时间的辅助函数,获取日期时间"""pass#
def toggle_display_digit():"""定义按钮“开启数显”的事件处理函数,切换数显"""passdef toggle_music_play():"""定义按钮“播放音乐”的事件处理函数,切换音乐播放"""passdef tick():"""定义时钟事件的处理函数(每0.1秒被系统调用1次)"""passdef draw(canvas):"""定义绘制屏幕的处理函数"""pass# 创建窗口# 注册事件处理器# 启动时钟# 调用获取日期时间函数# 启动窗口

以下为完整代码

# "时钟"游戏小项目程序模板import simpleguitk as gui
import math
from datetime import datetime# 定义全局变量
interval = 100          # 时间事件处理器触发的周期,0.1秒
hour_radian = 0.0       # 时针角度
minute_radian = 0.0     # 分针角度
second_radian = 0.0     # 秒针角度
digit_date = ''         # 日期
play_music = False      # 是否播放音乐
success = False         # 是否整秒点击 “关闭音乐” 成功
frame_width = 600       # 窗口的宽度
frame_height = 600      # 窗口的高度
digit_time = ''         # 时间
display_digit = False   # 是否数显
tenth_second = 0        # 十分之秒# 加载图像资源
clock_face = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project3/ClockFace.jpg")  #600*600
hour = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project3//Hour.png")            #16*600
minute = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project3/Minute.png")         #12*600
second = gui.load_image("http://202.201.225.74/video/PythonResoure/ProjectResource/images/project3//Second.png")        #30*600
# 加载并设置音乐资源
music_box = gui.load_sound("http://202.201.225.74/video/PythonResoure/ProjectResource/sounds/project3/music_box.ogg")
music_box.set_volume(0.5)def get_time():"""定义获取日期时间的辅助函数,获取日期时间"""global hour_radian, minute_radian, second_radian, digit_date, digit_time, tenth_seconddt = datetime.now()second_radian = 2.0 * math.pi * dt.second / 60.0minute_radian = 2.0 * math.pi * (dt.minute + dt.second / 60.0) / 60.0tenth_second = dt.microsecond // 100000if dt.hour <= 12:hour_radian = 2.0 * math.pi * (dt.hour + float(dt.minute) / 60.0) / 12.0else:hour_radian = 4.0 * math.pi * (dt.hour + float(dt.minute) / 60.0) / 24.0month = ''if dt.month < 10:month = '0' + str(dt.month)else:month = str(dt.month)day = ''if dt.day < 10:day = '0' + str(dt.day)else:day = str(dt.day)digit_date = str(dt.year) + '年' + month + '月' + day + '日'digit_time = str(dt.hour) + '时' + str(dt.minute) + '分' + str(dt.second) + '秒' + str(dt.microsecond // 100000)def toggle_display_digit():"""定义按钮“开启数显”的事件处理函数,切换数显"""global display_digitif not display_digit:display_digit = Truebutton1.set_text('关闭数显')else:button1.set_text('开启数显')display_digit = Falsedef toggle_music_play():"""定义按钮“播放音乐”的事件处理函数,切换音乐播放"""global success, play_musicsuccess = Falseif not play_music:play_music = Truemusic_box.rewind()music_box.play()button2.set_text("关闭音乐")elif play_music:if tenth_second == 0:success = Truemusic_box.pause()button2.set_text("播放音乐")play_music = Falsedef tick():"""定义时钟事件的处理函数(每0.1秒被系统调用1次)"""global successif success == True:if timer.is_running():timer.stop()elif success == False:get_time()timer.start()def draw(canvas):"""定义绘制屏幕的处理函数"""canvas.draw_image(clock_face, (300,300), (600,600), (300,300), (600,600))canvas.draw_image(hour, (8, 300), (16, 600), (302, 300), (16, 600),hour_radian)canvas.draw_image(minute, (6, 300), (12, 600), (302, 300), (12, 600),minute_radian)canvas.draw_image(second, (15, 300), (30, 600), (302, 300), (30, 600),second_radian)if display_digit:canvas.draw_text(digit_date, (220, 190), 20, "black")canvas.draw_text(digit_time, (220, 440), 20, "black")# 创建窗口
frame = gui.create_frame("神奇时钟",frame_height, frame_width)# 注册事件处理器
timer = gui.create_timer(100, tick)
button1 = frame.add_button("开启数显", toggle_display_digit, 80)
button2 = frame.add_button("播放音乐", toggle_music_play, 80)# 启动时钟
timer.start()# 调用获取日期时间函数
frame.set_draw_handler(draw)
# 启动窗口
frame.start()

python项目之神奇时钟相关推荐

  1. python神奇时钟项目_怎么在Python项目中利用Pygame绘制一个时钟

    怎么在Python项目中利用Pygame绘制一个时钟 发布时间:2020-11-30 14:24:30 来源:亿速云 阅读:54 作者:Leah 怎么在Python项目中利用Pygame绘制一个时钟? ...

  2. python神奇时钟项目_Python Tkinter模块实现时钟功能应用示例

    本文实例讲述了Python Tkinter模块实现时钟功能.分享给大家供大家参考,具体如下: 本机测试效果: 完整代码: # coding=utf-8 from Tkinter import * im ...

  3. 15个针对初学者的Python项目创意

    15个适合初学者的Python项目构想-在完成Python编程课程之后,每个初学者都应转向可帮助您发展编码技能的python项目.我知道您在想什么,我们是初学者,我们将如何完成这些python项目?今 ...

  4. 2013流行Python项目汇总

    2013流行Python项目汇总 转自:http://www.kankanews.com/ICkengine/archives/102963.shtml Python作为程序员的宠儿,越来越得到人们的 ...

  5. bootstrap项目实例_101个Python项目打包放送,工作学习必备(源码放送)

    了解Python的小伙伴都知道,Python是一个开源的编程语言,正是因为有全世界爱好Python的程序员不断完善Python编程语言,才有了现在Python这么强的实用性,能和各个语言结合使用,被称 ...

  6. python运维开发项目_GitHub上值得推荐的8个python 项目

    GitHub 无疑是代码托管领域的先行者,Python 作为一种通用编程语言,已经被千千万万的开发人员用来构建各种有意思或有用的项目.以下我们会介绍一些使用 Python 构建的GitHub上优秀的项 ...

  7. Python项目一:pygname

    1.安装pip   install    pygame 2.加载模块初始化:开始 import sys import pygamepygame.init() #初始化 3.创建窗口 3.1pygame ...

  8. 引入yml依赖包_手把手教你发布 Python 项目开源包

    编译:机器之心,作者:Gabriel Lerner.Nathan Toubiana 好不容易码了个 python 项目,是不是很兴奋?那么怎么把这个项目发出去让大家看到呢?本文作者写了一份在 GitH ...

  9. python项目了解_神级程序员都是这样来开源 Python 项目!今天算是涨知识了!

    工具和概念 项目布局 当准备一个项目时,正确合理的布局(目录结构)是十分重要的.一个合理的布局意味着想参与开发者不必花时间来寻找某些代码的位置; 凭直觉就可以找到文件的位置.因为我们在处理一个项目,就 ...

  10. Python训练营2021:构建8个真实世界的Python项目

    时长:19h 27m |视频:. MP4,1280×720 30 fps |音频:AAC,44.1 kHz,2ch |大小:9.54 GB 语言:英语+中英文字幕 机译 从Python Web开发的初 ...

最新文章

  1. Google 多任务学习框架 MMoE
  2. CTFshow 反序列化 web267
  3. excel概率密度函数公式_干货|利用excel公式,快速对定量的化学检测方法进行测量不确定度的评定...
  4. docker network基础
  5. Reducing the Dimensionality of Data with Neural Networks:神经网络用于降维
  6. jieba和thulac使用比较
  7. String类中不同拼接方式
  8. VMware发布虚拟云网络创新技术,连接和保护分布式多云企业
  9. 服务器不在工作_DHCP的工作原理
  10. Python 新式类与经典类
  11. alter 用法集合(持续更新)
  12. java框架注入是创建对象吗_spring之IOC容器创建对象
  13. DPDK-VPP 学习笔记-04 Load Balancer plugin nat4 PATCH
  14. 简析通达信股票接口测试过程
  15. mappedBy的基本认识
  16. 产品研发流程的四个里程碑
  17. 出方向链路负载均衡技术(原理部分)
  18. 爬取徐州市自然资源和规划局土地数据
  19. SSL-ZYC 游戏
  20. Android Remote Administrator Tool ——SpyNote 6.5 Released

热门文章

  1. windows10无法访问共享计算机,win10共享无法访问,windows无法访问共享文件
  2. c语言输出最大的数ns流程图_图8循环结构的NS流程图.ppt
  3. [IE8]開發自己站台的視覺化搜尋(Visual Search)
  4. 习题8-5 折纸痕(Paper Folding, UVa177)
  5. 2007年度全世界最好的50个网站
  6. openstack instance resize
  7. 用HTML和CSS制作一个带图片的旋转立方体
  8. java 调用微信JsApi支付
  9. 保姆级win10纯净系统安装 数字权利激活工具 / KMS激活 + U盘启动盘制作
  10. 【JMedia】诺贝尔奖得主:东亚教育浪费了太多生命