python+tkinter实现一个简单的秒钟

 更新时间:2024年02月21日 11:34:05   作者:微小冷  
这篇文章主要为大家详细介绍了Python如何利用tkinter实现一个简单的秒钟,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以自己动手尝试一下

需求和框架

本文试图实现一个简单的秒表,内容如下

在这里插入图片描述

这个软件非常简单,其UI元素只有一个文字标签外加三个按钮,这三个按钮的功能如下

  • 点击Start按钮,开始进行计时,同时Start变灰,无法点击
  • 点击Stop按钮,停止计时,同时Stop变灰,无法点击
  • 点击Reset按钮,则计时归0,若当前处于停止状态,则Reset变灰

则整个软件所需导入的模块以及整体框架如下

import tkinter as Tkinter
from datetime import datetime


class Clock():
    def __init__(self) -> None:
        root = Tkinter.Tk()
        root.title("Stopwatch")
        root.minsize(width=250, height=70)

        self.counter = 0
        self.running = False
        self.initWidgets(root)
        root.mainloop()

    def initWidgets(self, root): pass
    def count(self): pass
    def Start(self): pass
    def Stop(self): pass
    def Reset(self): pass

其中,counter为计数值,即点击Start之后经过的秒数;running为当前状态,如果正在计时,则为True,否则为False。

initWidgets是布局函数,Start, Stop, Reset分别是三个按钮的回调函数,count则用于计时。

下面的代码均为Clock中的方法,在使用时注意缩进。

布局和主流程

整个程序分为两个部分,上面的Label是第一部分,下面三个按钮共同组成第二部分,其布局代码如下

def initWidgets(self, root):
    self.label = Tkinter.Label(root,
            text='Ready!', font='Verdana 30 bold')
    self.label.pack()

    f = Tkinter.Frame(root)
    self.start = Tkinter.Button(f, text='Start', width=6,
                command=self.Start)
    self.stop = Tkinter.Button(f, text='Stop', width=6,
                state='disabled', command=self.Stop)
    self.reset = Tkinter.Button(f, text='Reset', width=6,
                state='disabled', command=self.Reset)

    f.pack(anchor='center', pady=5)
    self.start.pack(side='left')
    self.stop.pack(side='left')
    self.reset.pack(side='left')

三个按钮的三个回调函数如下,通过state来调整当前按钮的可用状态,若为disabled即表示不可用。当点击Start时,会调用计时函数count,这个函数在后面马上实现。

当点击Reset后,除了需要将label中的值初始化之外,还需要判断当前是否处于计时状态,如果已经停止计时,且已经Reset,则Reset按钮变灰。

    def Start(self):
        self.running = True
        self.count()
        self.start['state'] = 'disabled'
        self.stop['state'] = 'normal'
        self.reset['state'] = 'normal'

    def Stop(self):
        self.start['state'] = 'normal'
        self.stop['state'] = 'disabled'
        self.reset['state'] = 'normal'
        self.running = False

    def Reset(self):
        self.counter = 0
        if not self.running:
            self.reset['state'] = 'disabled'
        self.label['text'] = '00:00:00'

计时函数

一般来说,计时肯定要用到time.sleep,但在UI中,这种计时容易导致阻塞,进而窗口卡死,而要采用多线程,显然会增加程序的复杂程度。为此,可动用tkinter组件的after方法,以label.after(a,b)为例,表示经过a毫秒后,执行b。

下面即为采用after方法的计时函数。当程序不处于计时状态时,直接跳出。否则开始计时,当计数值为0时,标签显示Ready,否则显示的则是秒数。这里比较巧妙的方法是,等待1000毫秒,再重新调用自己,从而实现计时功能。

    def count(self):
        if not self.running:
            return
        if self.counter == 0:
            self.label['text'] = 'Ready!'
        else:
            tt = datetime.utcfromtimestamp(self.counter)
            self.label['text'] = tt.strftime('%H:%M:%S')

        self.label.after(1000, self.count)
        self.counter += 1

以上就是python+tkinter实现一个简单的秒钟的详细内容,更多关于python tkinter秒钟的资料请关注脚本之家其它相关文章!

相关文章

  • Python中six模块基础用法

    Python中six模块基础用法

    在本篇文章里小编给大家分享的是关于Python中six模块基础用法以及相关知识点,需要的朋友们学习下。
    2019-12-12
  • pygame实现非图片按钮效果

    pygame实现非图片按钮效果

    这篇文章主要介绍了pygame实现非图片按钮效果,不使用图片制作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Python Tornado框架轻松写一个Web应用的全过程

    Python Tornado框架轻松写一个Web应用的全过程

    Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,Tornado走的是少而精的方向,注重的是性能优越,它最出名的是异步非阻塞的服务器方式,这篇文章主要给大家介绍了关于Python Tornado框架轻松写一个Web应用的相关资料,需要的朋友可以参考下
    2021-08-08
  • Python包管理工具pip用法详解

    Python包管理工具pip用法详解

    本文详细讲解了Python包管理工具pip的用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Python中窗口操作的完整教程

    Python中窗口操作的完整教程

    在使用 Python 进行窗口操作时,可以执行各种任务,如最大化、最小化、置顶窗口,本文将详细介绍这些操作,并提供丰富的示例代码,希望可以更好地帮助大家了解如何利用 Python 操纵窗口
    2023-11-11
  • 序列化Python对象的方法

    序列化Python对象的方法

    这篇文章主要介绍了序列化Python对象的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • Django中的“惰性翻译”方法的相关使用

    Django中的“惰性翻译”方法的相关使用

    这篇文章主要介绍了Django中的“惰性翻译”方法的相关使用,Django是最具人气的Python web开发框架,需要的朋友可以参考下
    2015-07-07
  • Django管理员账号和密码忘记的完美解决方法

    Django管理员账号和密码忘记的完美解决方法

    这篇文章主要给大家介绍了关于Django管理员账号和密码忘记的完美解决方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-12-12
  • python3 chromedrivers签到的简单实现

    python3 chromedrivers签到的简单实现

    本文主要介绍了python3 chromedrivers签到的简单实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python实现农历转换教程详解

    Python实现农历转换教程详解

    农历,是我国现行的传统历法。它是根据月相的变化周期,每一次月相朔望变化为一个月,参考太阳回归年为一年的长度,并加入二十四节气与设置闰月以使平均历年与回归年相适应。本文将用Python实现农历转换,需要的可以参考一下
    2022-03-03

最新评论