Python 과 Tkinter 를 사용한 스톱워치

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 Python 과 Tkinter 를 사용하여 간단한 스톱워치 애플리케이션을 만들 것입니다. 스톱워치는 시작, 중지, 재설정 및 종료 기능을 갖게 됩니다. 그래픽 사용자 인터페이스 (GUI) 구성 요소에는 Tkinter 라이브러리를 사용하고, 시간 관련 작업에는 time 라이브러리를 사용할 것입니다.

👀 미리보기

Stopwatch GUI preview

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • GUI 및 시간 관련 작업에 필요한 라이브러리를 가져오는 방법
  • Frame 클래스를 확장하는 StopWatch 클래스를 정의하는 방법
  • 스톱워치용 GUI 구성 요소를 만드는 방법
  • 경과 시간을 업데이트하고 GUI 에 표시하는 방법
  • 스톱워치를 시작, 중지 및 재설정하는 기능을 구현하는 방법
  • StopWatch 객체를 초기화하고 상호 작용을 위한 버튼을 추가하는 main 함수를 만드는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • Python 에서 Tkinter 를 사용하여 GUI 애플리케이션을 만들 수 있습니다.
  • Python 에서 시간 관련 작업을 수행할 수 있습니다.
  • 스톱워치 기능을 구현할 수 있습니다.

프로젝트 파일 생성

먼저, stopwatch.py라는 새 파일을 생성하고 선호하는 코드 편집기에서 엽니다.

cd ~/project
touch stopwatch.py
✨ 솔루션 확인 및 연습

필요한 라이브러리 가져오기

stopwatch.py 파일에서 필요한 라이브러리를 가져오는 것으로 시작합니다. GUI 구성 요소에는 Tkinter를, 테마 위젯에는 ttk를, 시간 관련 작업에는 time을 사용해야 합니다. 파일 시작 부분에 다음 코드를 추가합니다:

from tkinter import *
from tkinter import ttk
import time
✨ 솔루션 확인 및 연습

StopWatch 클래스 정의

다음으로, Frame 클래스를 확장하는 StopWatch라는 클래스를 정의합니다. 이 클래스를 사용하여 스톱워치 기능을 생성합니다. import 문 다음에 다음 코드를 추가합니다:

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()
✨ 솔루션 확인 및 연습

GUI 컴포넌트 생성

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 컴포넌트 생성, 경과 시간 업데이트, 시작, 정지 및 재설정 기능 구현, 그리고 메인 애플리케이션 생성 단계를 거쳤습니다. 이제 프로젝트를 실행하고 버튼을 사용하여 스톱워치를 제어할 수 있습니다.