Введение
В этом проекте мы создадим простое приложение секундомера на Python с использованием Tkinter. Секундомер будет иметь функции запуска, остановки, сброса и выхода. Мы будем использовать библиотеку Tkinter для графических компонентов пользовательского интерфейса (GUI) и библиотеку time для операций, связанных с временем.
👀 Предварительный просмотр

🎯 Задачи
В этом проекте вы научитесь:
- Как импортировать необходимые библиотеки для GUI и операций, связанных с временем
- Как определить класс StopWatch, который наследует класс Frame
- Как создать графические компоненты для секундомера
- Как обновлять пройденное время и отображать его в GUI
- Как реализовать функции запуска, остановки и сброса секундомера
- Как создать главную функцию для инициализации объекта StopWatch и добавления кнопок для взаимодействия
🏆 Достижения
После завершения этого проекта вы сможете:
- Создать GUI-приложение на Python с использованием Tkinter
- Работать с операциями, связанными с временем, в Python
- Реализовать функцию секундомера
Создайте файлы проекта
Сначала создайте новый файл с именем stopwatch.py и откройте его в предпочитаемом редакторе кода.
cd ~/project
touch stopwatch.py
Импортируйте необходимые библиотеки
В файле stopwatch.py начните с импорта требуемых библиотек. Для графических компонентов нам нужна Tkinter, для виджетов с оформлением - 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, который создает и размещает графические компоненты. Этот метод будет вызываться из конструктора. Добавьте следующий код внутри класса 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)
Обновите пройденное время
Добавьте метод с именем _update внутри класса StopWatch. Этот метод будет вычислять пройденное время и обновлять графический интерфейс. Добавьте следующий код внутри класса StopWatch:
def _update(self):
self._elapsedtime = time.time() - self._start
self._setTime(self._elapsedtime)
self._timer = self.after(50, self._update)
Установите время
Добавьте метод с именем _setTime внутри класса StopWatch. Этот метод будет форматировать время и обновлять переменную 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))
Реализуйте функцию запуска
Добавьте метод с именем Start внутри класса StopWatch. Этот метод будет запускать секундомер. Добавьте следующий код внутри класса StopWatch:
def Start(self):
if not self._running:
self._start = time.time() - self._elapsedtime
self._update()
self._running = 1
Реализуйте функцию остановки
Добавьте метод с именем Stop внутри класса StopWatch. Этот метод будет останавливать секундомер. Добавьте следующий код внутри класса 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
Реализуйте функцию сброса
Добавьте метод с именем Reset внутри класса StopWatch. Этот метод будет сбрасывать секундомер. Добавьте следующий код внутри класса StopWatch:
def Reset(self):
self._start = time.time()
self._elapsedtime = 0.0
self._setTime(self._elapsedtime)
Создайте главную функцию
Добавьте функцию main вне класса StopWatch. Эта функция будет создавать главное окно приложения, инициализировать объект 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

Резюме
Поздравляем! Вы успешно создали приложение для секундомера с использованием Python и Tkinter. Мы прошли по шагам создания файлов проекта, импортирования необходимых библиотек, определения класса StopWatch, создания компонентов GUI, обновления времени, прошедшего с начала запуска, реализации функций запуска, остановки и сброса и создания главного приложения. Теперь вы можете запустить проект и использовать кнопки для управления секундомером.



