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

2024-03-01 0 599
目录
  • 需求和框架
  • 布局和主流程
  • 计时函数

需求和框架

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

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+tkinter自定义实现文件选择按钮
  • 基于Python+tkinter实现简易计算器桌面软件
  • Python+tkinter实现树形图绘制
  • Python+tkinter实现一个绘图风格控件
  • python使用tkinter实现自定义多参数对话框

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Python python+tkinter实现一个简单的秒钟 https://www.u-9.cn/jiaoben/python/180421.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务