Python Tkinter模块实现时钟功能应用示例


Posted in Python onJuly 23, 2018

本文实例讲述了Python Tkinter模块实现时钟功能。分享给大家供大家参考,具体如下:

本机测试效果:

Python Tkinter模块实现时钟功能应用示例

完整代码:

# coding=utf-8
from Tkinter import *
import _tkinter
import math
import time
from threading import Thread
class Clock:
  def __init__(self, master, x, y, width, height, radius):
    '''
    :param master: 父窗口
    :param x: 时钟中心点的x坐标
    :param y: 时钟中心点的y坐标
    :param width: 画布的宽度
    :param height: 画布的高度
    :param radius: 时钟钟盘的半径
    '''
    self.centerX = x
    self.centerY = y
    self.radius = radius
    self.canvas = Canvas(master, width=width, height=height) # 画布
    self.canvas.pack()
    self.canvas.create_oval(
      x - radius,
      y - radius,
      x + radius,
      y + radius) # 画钟框
    self.id_lists = []
    self.hourHandRadius = self.radius * 1.0 / 4  # 指针长度
    self.minHandRadius = self.radius * 2.0 / 3  # 分针长度
    self.secHandRadius = self.radius * 4.0 / 5  # 秒针长度
    self.timeVar = StringVar()
    # self.timeVar.set('')
    self.timeLabel = Label(self.canvas.master, textvariable=self.timeVar)
    self.timeLabel.pack(side=BOTTOM)
    #self.canvas.master.protocol('WM_DELETE_WINDOW', self.canvas.master.destroy)
  def __del__(self):
    self._deleteItems(self.id_lists)
  # 绘制时钟钟盘
  def drawClockDial(self):
    # 绘制钟盘上的数字1-12
    r = self.radius - 15
    for i in range(1, 13):
      rad = 2 * math.pi / 12 * i
      x = self.centerX + math.sin(rad) * r
      y = self.centerY - math.cos(rad) * r
      id = self.canvas.create_text(x, y, text=str(i))
      self.id_lists.append(id)
    # 绘制钟盘上的刻度
    r1 = self.radius - 5
    r2 = self.radius
    for i in range(1, 61):
      rad = 2 * math.pi / 60 * i
      x1, y1 = self._getPosByRadAndRadius(rad, r1)
      x2, y2 = self._getPosByRadAndRadius(rad, r2)
      id = self.canvas.create_line(x1, y1, x2, y2)
      self.id_lists.append(id)
  # 显示时间
  def showTime(self, tm):
    hour = tm.tm_hour % 12
    min = tm.tm_min
    sec = tm.tm_sec
    sec_rad = 2 * math.pi / 60 * sec
    min_rad = 2 * math.pi / 60 * (min + sec / 60.0)
    hour_rad = 2 * math.pi / 12 * (hour + min / 60.0)
    timeStr = '当前时间: %d-%02d-%02d %02d:%02d:%02d' % (
      tm.tm_year, tm.tm_mon, tm.tm_mday, hour, min, sec)
    self.timeVar.set(timeStr)
    hour_id = self._drawLine(hour_rad, self.hourHandRadius, 6)
    min_id = self._drawLine(min_rad, self.minHandRadius, 4)
    sec_id = self._drawLine(sec_rad, self.secHandRadius, 3)
    return (hour_id, min_id, sec_id)
  def run(self):
    def _run():
      while True:
        tm = time.localtime()
        id_lists = self.showTime(tm)
        self.canvas.master.update()
        time.sleep(1)
        self._deleteItems(id_lists)
    thrd = Thread(target=_run) # 创建新的线程
    thrd.run() # 启动线程
  def _drawLine(self, rad, radius, width):
    x, y = self._getPosByRadAndRadius(rad, radius)
    id = self.canvas.create_line(
      self.centerX, self.centerY, x, y, width=width)
    return id
  def _getPosByRadAndRadius(self, rad, radius):
    x = self.centerX + radius * math.sin(rad)
    y = self.centerY - radius * math.cos(rad)
    return (x, y)
  def _deleteItems(self, id_lists):
    for id in id_lists:
      try:
        self.canvas.delete(id)
      except BaseException:
        pass
if __name__ == '__main__':
  root = Tk()
  root.title('3water.com 时钟')
  clock = Clock(root, 200, 200, 400, 400, 150)
  clock.drawClockDial()
  clock.run()
  root.mainloop()

待解决的bug:

关闭程序的时候,会出现如下的错误:

Python Tkinter模块实现时钟功能应用示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 Python
理解生产者消费者模型及在Python编程中的运用实例
Jun 26 Python
Python实现简单的获取图片爬虫功能示例
Jul 12 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
python生成圆形图片的方法
Mar 25 Python
Python3实现的字典遍历操作详解
Apr 18 Python
详解通过API管理或定制开发ECS实例
Sep 30 Python
Python实现Selenium自动化Page模式
Jul 14 Python
用Python实现校园通知更新提醒功能
Nov 23 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
Python如何使用vars返回对象的属性列表
Oct 17 Python
python定向爬虫校园论坛帖子信息
Jul 23 #Python
python实现图片批量压缩程序
Jul 23 #Python
python中的插值 scipy-interp的实现代码
Jul 23 #Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 #Python
python中的turtle库函数简单使用教程
Jul 23 #Python
Flask框架配置与调试操作示例
Jul 23 #Python
python实现时间o(1)的最小栈的实例代码
Jul 23 #Python
You might like
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
jQuery实现自动调整字体大小的方法
2015/06/15 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
python清除字符串里非字母字符的方法
2015/07/02 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
python图像常规操作
2017/11/11 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
python实现二分查找算法
2020/09/18 Python
酒店led欢迎词
2014/01/09 职场文书
临床专业自荐信
2014/06/22 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
立项申请报告范本
2015/05/15 职场文书
2016年记者节感言
2015/12/08 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python
Python答题卡识别并给出分数的实现代码
2021/06/22 Python
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏
python小型的音频操作库mp3Play
2022/04/24 Python