# 秒表计时器"""
思考:1、怎么创建一个最简单的窗口?2、怎么保持窗口一直运行?3、不用方法mainloop()怎么实现窗口一直运行?4、请问窗口的宽度*高度默认值为多少个像素点?5、利用方法geometry()设置窗口大小为100*100,能否实现?6、同为关闭方法,quit()与destroy()有什么区别?介绍:在我们学生时代除了对体育老师身体健康感到担忧外,最怕800米/1000米体能测试,仿佛被恐惧支配身体所以我们对体育老师的刻板印象是:ta总是拿着秒表计时器和口哨,随时都有可能来一个体能测试,呜呜!秒表计时器,顾名思义,就是可以用来计时的,最小单位是10毫秒,它的换算方法是:1小时=60分钟,1分钟=60秒,1秒=1000毫秒,1毫秒=1000微妙,1微妙=1000纳秒...我把生活中常见的秒表计时器和时钟结合起来,做一个与手机阉割版闹钟APP相似的秒表计时器。知识点:1、计算窗口像素点方法:winfo_width()、winfo_height()2、导入内置模块:tkinter、time3、设置窗口大小、显示位置、标题内容:geometry()、title()4、旗帜的使用,本程序用了很多的的旗帜(重点)5、在局部作用域内修改全局变量:global6、组件的使用:标签Label()、按键Button()、框架Frame()7、布局管理器:pack()、grid()、place()8、事件处理方式:command、bind、bind_all待改善:1、界面太丑,功能简陋,有待优化2、秒表计时不精准,有待改善3、代码注释较少,对新踏足Python的道友不太友好创新:1、可以添加显示日期2、可以闹钟功能3、提示语可以用messagebox类实现弹出警告框"""
# 秒表计时器# 导入模块  ===============================================================
import tkinter as tk
import time# 创建一个根窗口
root = tk.Tk()
# 设置窗口显示位置及大小
root.geometry(newGeometry='400x300+450+200')
# 设置窗口标题
root.title(string='秒表计时器')# 全局变量  ===============================================================
# 创建一个可修改类型
clock = tk.StringVar()# 定义一个模式旗帜
flag_mode = 0
# 定义开始计时旗帜
flag_begin_time = 0
# 定义一个计时 秒、分、毫秒
sec = 0
min = 0
mill = 0
# 定义一个计时 秒、分、毫秒 字符型
str_sec = ''
str_min = ''
str_mill = ''count = 0   # 计数# 切换旗帜
flag_switch = 0
# 存储秒表计次内容
meter_info = ''
# 秒表计次次数
meter_count = 0# 按键功能实现    ==========================================================
# 时钟/计时切换
def switch_mode():# 声明全局变量,在局部作用域里修改global flag_mode# 显示秒表# 如果满足首次按秒表键,以及在停止秒表计时if flag_mode == 0 and not flag_switch:# 设置秒表初始状态,以及保存暂停后的数据if str_min == '' and str_sec == '' and str_mill == '':clock.set(value='00:00:00')else:clock.set(value=f'{str_min}:{str_sec}:{str_mill}')button5['text'] = '时钟'  # 按键内容更改# 设置按键形态button1['relief'] = tk.RAISEDbutton2['relief'] = tk.RAISEDbutton3['relief'] = tk.RAISEDflag_mode = 1   # 时钟模式# 显示时钟# 如果满足按时钟键,以及在停止秒表计时elif flag_mode == 1 and not flag_switch:button5['text'] = '秒表'  # 按键内容更改# 设置按键形态button1.config(relief=tk.SUNKEN)button2.config(relief=tk.SUNKEN)button3.config(relief=tk.SUNKEN)flag_mode = 0   # 秒表模式# 开始计时
def start():# 声明全局变量,在局部作用域里修改global flag_begin_time, flag_switch# 开始# 如果满足按的是秒表键,以及按开始键if flag_mode and not flag_switch:flag_begin_time = 1         # 开始秒表计时button1['text'] = '暂停'     # 更改按键内容flag_switch = 1             # 暂停秒表计时# 停止# 如果满足按的是秒表键,以及按暂停键elif flag_mode and flag_switch:flag_begin_time = 0         # 暂停秒表计时button1['text'] = '开始'     # 更改按键内容flag_switch = 0             # 开始秒表计时# 实现计时功能
def start_time():# 声明全局变量,在局部作用域里修改global min, sec, millglobal str_min, str_sec, str_millglobal count# 秒表进位if count % 100 == 0 and count != 0:count = 0mill += 1if mill % 60 == 0 and mill != 0:mill = 0sec += 1if sec % 60 == 0 and sec != 0:sec = 0min += 1# 秒表数字10以下在前面补零if mill < 10:str_mill = '0' + str(mill)else:str_mill = str(mill)if sec < 10:str_sec = '0' + str(sec)else:str_sec = str(sec)if min < 10:str_min = '0' + str(min)else:str_min = str(min)# 显示秒表clock.set(value=f'{str_min}:{str_sec}:{str_mill}')count += 100  # 累加# 重置
def reset():# 声明全局变量,在局部作用域里修改global flag_begin_timeglobal min, sec, mill, countglobal flag_switchglobal meter_info, meter_count# 如果满足秒表模式if flag_mode:# 停止秒表计时flag_begin_time = 0# 秒表清零count = 0min, sec, mill = 0, 0, 0start_time()# 复位开始按键flag_switch = 1start()# 清空秒表计次meter_info = ''label1['text'] = ''meter_count = 0# 清空秒表计次提示语label2['text'] = ''# 秒表计次
def metering():# 声明全局变量,在局部作用域里修改global meter_info, meter_count# 如果满足限制只能秒表内操作if flag_mode and flag_begin_time and meter_count < 5:meter_info += clock.get() + '\n'label1['text'] = meter_infometer_count += 1 # 秒表计次次数# 显示秒表计次上限提示语elif flag_mode and flag_begin_time and meter_count >= 5:label2['text'] = '已超过秒表计次上限!'# 创建一个主框架   ==========================================================
frame = tk.Frame(master=root, relief=tk.RIDGE, borderwidth=2)
# 创建一个功能框架
frame1 = tk.Frame(master=frame, )# 创建一个标签,用于显示时间
label = tk.Label(master=frame, textvariable=clock, height=3)
# 创建一个秒表计次标签
label1 = tk.Label(master=root)
# 创建一个提示语标签
label2 = tk.Label(master=root, height=3)# 创建功能按键
button1 = tk.Button(master=frame1, text='开始', relief=tk.SUNKEN, command=start)
button2 = tk.Button(master=frame1, text='重置', relief=tk.SUNKEN, command=reset)
button3 = tk.Button(master=frame1, text='计次', relief=tk.SUNKEN, command=metering)
button4 = tk.Button(master=frame1, text='退出', command=root.destroy)
# 计时/时钟按键
button5 = tk.Button(master=frame, text='秒表', relief=tk.FLAT, command=switch_mode)# 功能实现  =================================================================
while True:# 显示主框架位置frame.place(relx=0.5, rely=0.5, anchor=tk.CENTER)# 显示标签内容label.pack()# 显示时钟/秒表按键button5.pack()# 显示功能框架frame1.pack()# 显示按键button1.pack(side=tk.LEFT)button2.pack(side=tk.LEFT)button3.pack(side=tk.LEFT)button4.pack(side=tk.RIGHT)# 显示秒表计次label1.place(relx=0.5, rely=0.71, anchor=tk.N)# 显示秒表计次提示语label2.pack()# 实时时间if not flag_mode:clock.set(value=time.strftime('%H:%M:%S'))# 开始计时if flag_begin_time:start_time()# 刷新窗口root.update()time.sleep(0.0001)# 保持窗口运行
root.mainloop()

运行结果:

作者:周华

创作日期:2022/9/13

Python 内置模块tkinter —— 秒表计时器相关推荐

  1. python实现秒表计时器

    秒表计时器 需求 利用python实现一个秒表计时器 2.能实现开始,停止,重置,退出功能 代码块 #from tkinter import * import time from re import ...

  2. python turtle循环图案-Python内置模块turtle绘图详解

    urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...

  3. python:tkinter —— Tcl/Tk 的 Python 接口

    python:tkinter -- Tcl/Tk 的 Python 接口 架构 Tkinter 模块 Tkinter 拾遗 Hello World 程序 重要的 Tk 概念 了解 Tkinter 如何 ...

  4. python实现一个秒表(可用于跑步比赛记录名次与时间)

    TOC 欢迎学习用python实现一个秒表 对于各种田径比赛,我们都需要利用一种计时器来对参赛者进行计时,也就是秒表,按一次则可以记录一个时间,同时不会影响自开始到结束整个过程的时间. 第三方库:ti ...

  5. 如何使用Python和Tkinter构建Toy Markdown编辑器

    Markdown editors are trending these days. Everybody is creating a markdown editor, and some of them ...

  6. python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...

    使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),创建一个,界面,布局,文件,路径 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二) ...

  7. Python使用tkinter构建一个多元回归预测模型GUI界面(接受用户输入数据并给出模型推理结果)

    Python使用tkinter构建一个多元回归预测模型GUI界面(接受用户输入数据并给出模型推理结果) 目录

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

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

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

    Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Menu/Menu的Command) 目录 tkinter应用案例 1.添加右键弹出菜单 2.点击一个按钮弹 ...

最新文章

  1. AI杀入斗地主领域,快手开发DouZero对标AlphaZero,干掉344个AI获第一
  2. 科大星云诗社动态20211201
  3. mysql proxy 管理_ProxyMySQL的Admin管理接口
  4. java 命令行参数 _java命令行参数
  5. 正则表达式处理字符串指定位置插入【高级】
  6. Linux 命令(85)—— md5sum 命令
  7. Visual Assist X安装
  8. redis强一致性_Redis的8连击,验证你是否熟练掌握Redis核心知识点。
  9. 根目录_macOS Catalina 根目录锁定问题解决方法
  10. java bitmap位图_BitMap位图与海量数据的理解
  11. Python视频制作 MoviePy框架音频处理模块
  12. 目标检测的名词概念(持续记录中.....)
  13. 游戏中的造型师——3D美术
  14. TP6基础知识【新框架】
  15. 系统集成项目应怎样管?本文经验值得借鉴
  16. PHP7都有哪些新特性
  17. 安卓6.0版本后出现的语音开启失败问题,错误码20006
  18. ant build.xml 配置详解
  19. mysql实现增量备份
  20. WPS中excel 把ABCD改成数字

热门文章

  1. ra3录像重播工具_设置DO-RA小工具的网络销售渠道
  2. 手机投屏到电脑 -- 小黑超细日常教程
  3. 2016 GitHub章鱼猫观察报告之开源统计
  4. Rmxprt Maxwell 生成2D和3D全模型方法
  5. google浏览器显示Adobe Flash player过期的处理方法
  6. java 数组去除重复_Java从数组中删除重复项?
  7. 计算机键盘分为哪5个区,计算机键盘分区之功能键区
  8. Linux进程管理工具_Supervisor的安装与配置
  9. python目前版本强势英雄_王者荣耀S11赛季什么英雄强势 S11强势英雄推荐
  10. linux iscsi软件,Redhat Linux 配置 iSCSI 连接存储