使用 Python 和 Tkinter 制作秒表

PythonBeginner
立即练习

介绍

在这个项目中,我们将使用 Python 和 Tkinter 创建一个简单的秒表应用程序。该秒表将具备启动、停止、重置和退出功能。我们将使用 Tkinter 库来创建图形用户界面(GUI)组件,并使用 time 库来进行与时间相关的操作。

👀 预览

秒表 GUI 预览

🎯 任务

在这个项目中,你将学习:

  • 如何导入用于 GUI 和时间相关操作的必要库
  • 如何定义一个继承自 Frame 类的 StopWatch 类
  • 如何为秒表创建 GUI 组件
  • 如何更新经过的时间并在 GUI 中显示
  • 如何实现启动、停止和重置秒表的功能
  • 如何创建一个主函数来初始化 StopWatch 对象并添加用于交互的按钮

🏆 成果

完成这个项目后,你将能够:

  • 使用 Python 中的 Tkinter 创建一个 GUI 应用程序
  • 处理 Python 中与时间相关的操作
  • 实现秒表的功能

创建项目文件

首先,创建一个名为 stopwatch.py 的新文件,并在你喜欢的代码编辑器中打开它。

cd ~/project
touch stopwatch.py
✨ 查看解决方案并练习

导入必要的库

stopwatch.py 文件中,首先导入所需的库。我们需要使用 Tkinter 来创建 GUI 组件,使用 ttk 来创建带主题的小部件,以及使用 time 来进行与时间相关的操作。在文件开头添加以下代码:

from tkinter import *
from tkinter import ttk
import time
✨ 查看解决方案并练习

定义 StopWatch 类

接下来,定义一个名为 StopWatch 的类,它继承自 Frame 类。我们将使用这个类来实现秒表功能。在导入语句之后添加以下代码:

class StopWatch(Frame):
    def __init__(self, parent=None, **kw):
        Frame.__init__(self, parent, kw)
        self._start = 0.0
        self._elapsedtime = 0.0
        self._running = 0
        self.timestr = StringVar()

        self.makeWidgets()
✨ 查看解决方案并练习

创建图形用户界面组件

StopWatch 类中,添加一个名为 makeWidgets 的方法,用于创建和定位 GUI 组件。此方法将在构造函数中被调用。在 StopWatch 类中添加以下代码:

    def makeWidgets(self):
        l = ttk.Label(self, textvariable=self.timestr)
        self._setTime(self._elapsedtime)
        l.pack(fill=X, expand=NO, pady=2, padx=2)
✨ 查看解决方案并练习

更新流逝时间

StopWatch 类中添加一个名为 _update 的方法。此方法将计算流逝的时间并更新 GUI。在 StopWatch 类中添加以下代码:

    def _update(self):
        self._elapsedtime = time.time() - self._start
        self._setTime(self._elapsedtime)
        self._timer = self.after(50, self._update)
✨ 查看解决方案并练习

设置时间

StopWatch 类中添加一个名为 _setTime 的方法。此方法将格式化时间并更新 timestr 变量。在 StopWatch 类中添加以下代码:

    def _setTime(self, elap):
        minutes = int(elap / 60)
        hours = int(minutes / 60)
        seconds = int(elap - minutes * 60.0)
        hseconds = int((elap - minutes * 60.0 - seconds) * 100)
        self.timestr.set('%02d:%02d:%02d:%02d' % (hours, minutes, seconds, hseconds))
✨ 查看解决方案并练习

实现开始功能

StopWatch 类中添加一个名为 Start 的方法。此方法将启动秒表。在 StopWatch 类中添加以下代码:

    def Start(self):
        if not self._running:
            self._start = time.time() - self._elapsedtime
            self._update()
            self._running = 1
✨ 查看解决方案并练习

实现停止功能

StopWatch 类中添加一个名为 Stop 的方法。此方法将停止秒表。在 StopWatch 类中添加以下代码:

    def Stop(self):
        if self._running:
            self.after_cancel(self._timer)
            self._elapsedtime = time.time() - self._start
            self._setTime(self._elapsedtime)
            self._running = 0
✨ 查看解决方案并练习

实现重置功能

StopWatch 类中添加一个名为 Reset 的方法。此方法将重置秒表。在 StopWatch 类中添加以下代码:

    def Reset(self):
        self._start = time.time()
        self._elapsedtime = 0.0
        self._setTime(self._elapsedtime)
✨ 查看解决方案并练习

创建主函数

StopWatch 类之外添加一个 main 函数。此函数将创建主应用程序窗口,初始化 StopWatch 对象,并添加用于开始、停止、重置和退出的按钮。在 StopWatch 类之后添加以下代码:

def main():
    root = Tk()
    sw = StopWatch(root)
    sw.pack(side=TOP)

    Button(root, text='Start', command=sw.Start).pack(side=LEFT)
    Button(root, text='Stop', command=sw.Stop).pack(side=LEFT)
    Button(root, text='Reset', command=sw.Reset).pack(side=LEFT)
    Button(root, text='Quit', command=root.quit).pack(side=LEFT)

    root.mainloop()


if __name__ == '__main__':
    main()
✨ 查看解决方案并练习

运行项目

最后,切换到桌面并使用以下命令运行项目:

python stopwatch.py
stopwatch project execution
✨ 查看解决方案并练习

总结

恭喜你!你已经成功地使用 Python 和 Tkinter 创建了一个秒表应用程序。我们经历了创建项目文件、导入必要的库、定义 StopWatch 类、创建 GUI 组件、更新流逝的时间、实现开始、停止和重置功能以及创建主应用程序的步骤。现在你可以运行该项目并使用按钮来控制秒表了。