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

🎯 과제
이 프로젝트에서 다음을 배우게 됩니다:
- 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

요약
축하합니다! Python 과 Tkinter 를 사용하여 스톱워치 애플리케이션을 성공적으로 만들었습니다. 프로젝트 파일 생성, 필요한 라이브러리 가져오기, StopWatch 클래스 정의, GUI 컴포넌트 생성, 경과 시간 업데이트, 시작, 정지 및 재설정 기능 구현, 그리고 메인 애플리케이션 생성 단계를 거쳤습니다. 이제 프로젝트를 실행하고 버튼을 사용하여 스톱워치를 제어할 수 있습니다.



