스톱워치는 시간을 정확하게 측정하고 추적하는 데 유용한 도구입니다. 운동 시간을 측정하거나 학습 세션을 추적하거나 이벤트 기간을 측정해야 하는 경우 Python Tkinter 스톱워치 응용 프로그램 구축을 통해 재미있고 교육적인 코딩을 만들어 보겠습니다.
[목차]
1. 필수 모듈 가져오기
2. Python Tkinter 스톱워치 클래스 만들기
3. 사용자 인터페이스 디자인
4. 스톱워치 기능 구현
5. 경과 시간 업데이트
6. 애플리케이션 실행
7. 예제 프로그램 코드
8. 결론 및 의견
1. 필수 모듈 가져오기
시작하려면 스톱워치 애플리케이션에 필요한 모듈을 가져옵니다.
import tkinter as tk
import time
tkinter 모듈은 그래픽 사용자 인터페이스를 구축하기 위한 기반을 제공하는 반면 time 모듈은 시간 관련 기능을 사용할 수 있게 해줍니다.
2. Python Tkinter 스톱워치 클래스 만들기
다음으로 tkinter.Tk에서 상속받은 Stopwatch라는 클래스를 정의합니다. 이 클래스는 스톱워치 응용 프로그램의 기본 창 역할을 합니다.
class Stopwatch(tk.Tk):
def __init__(self):
super().__init__()
self.title("Stopwatch")
self.geometry("400x200")
self.elapsed_time = 0
self.running = False
self.create_widgets()
init 메소드는 창의 제목과 초기 크기를 설정하고, 경과 시간을 0으로 초기화하고, 실행 상태를 False로 설정합니다.
3. 사용자 인터페이스 디자인
create_widgets 메서드 내에서 필요한 위젯을 추가하여 사용자 인터페이스를 디자인합니다.
def create_widgets(self):
self.time_label = tk.Label(self, text="00:00:00", font=("Helvetica", 48))
self.time_label.pack(pady=20)
self.start_button = tk.Button(self, text="Start", command=self.start)
self.start_button.pack(side=tk.LEFT, padx=10)
self.stop_button = tk.Button(self, text="Stop", command=self.stop)
self.stop_button.pack(side=tk.LEFT, padx=10)
self.reset_button = tk.Button(self, text="Reset", command=self.reset)
self.reset_button.pack(side=tk.LEFT, padx=10)
경과 시간을 큰 글꼴로 표시하기 위해 Label 위젯을 만듭니다. 시작, 중지 및 재설정 버튼은 각각 해당 명령이 있는 Button 위젯을 사용하여 추가됩니다.
4. 스톱워치 기능 구현
이제 start, stop 및 reset 메서드를 정의하여 스톱워치의 기능을 구현해 보겠습니다.
def start(self):
if not self.running:
self.start_time = time.time() - self.elapsed_time
self.update_time()
self.running = True
def stop(self):
if self.running:
self.after_cancel(self.timer)
self.running = False
def reset(self):
self.elapsed_time = 0
self.update_time()
사용자가 시작 버튼을 클릭하면 start 메서드가 호출됩니다. 현재 시간을 시작점으로 기록하고 update_time 메서드를 사용하여 업데이트 루프를 시작합니다.
사용자가 중지 버튼을 클릭하면 stop 메서드가 호출됩니다. 'after_cancel' 메서드를 사용하여 업데이트 루프를 취소하고 실행 상태를 'False'로 설정합니다.
사용자가 재설정 버튼을 클릭하면 reset 메서드가 호출됩니다. 경과 시간을 다시 0으로 설정하고 시간 레이블을 업데이트합니다.
5. 경과 시간 업데이트
경과 시간을 계산하고 시간 레이블을 업데이트하는 update_time이라는 메서드를 만들어야 합니다.
def update_time(self):
if self.running:
self.elapsed_time = time.time() - self.start_time
hours = int(self.elapsed_time // 3600)
minutes = int((self.elapsed_time % 3600) // 60)
seconds = int(self.elapsed_time % 60)
time_string = f"{hours:02d}:{minutes:02d}:{seconds:02d}"
self.time_label.config(text=time_string)
self.timer = self.after(1000, self.update_time)
update_time 메서드 내에서 현재 시간에서 시작 시간을 빼 경과 시간을 계산합니다. 그런 다음 경과 시간을 시, 분, 초 형식으로 지정하고 시간 레이블을 업데이트합니다.
'after' 메서드는 1초(1000밀리초) 후 경과 시간의 다음 업데이트를 예약하는 데 사용됩니다. 이렇게 하면 스톱워치가 실행되는 동안 시간 레이블을 지속적으로 업데이트하는 루프가 생성됩니다.
6. 애플리케이션 실행
스톱워치 애플리케이션을 실행하려면 Stopwatch 클래스의 인스턴스를 생성하고 Tkinter 이벤트 루프를 시작해야 합니다.
if __name__ == "__main__":
stopwatch = Stopwatch()
stopwatch.mainloop()
if name == "main": 블록은 스크립트를 모듈로 가져올 때가 아니라 스크립트를 직접 실행할 때만 코드가 실행되도록 합니다.
7. 예제 프로그램 코드
코드는 Python 및 Tkinter를 사용하여 스톱워치 애플리케이션을 만드는 방법을 보여줍니다. 코드를 실행하면 경과 시간을 "hh:mm:ss" 형식으로 표시하는 표시 레이블과 함께 "Stopwatch"라는 제목의 창이 나타납니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
import tkinter as tk
import time
class Stopwatch(tk.Tk):
def __init__(self):
super().__init__()
self.title("Stopwatch")
self.geometry("400x200")
self.elapsed_time = 0
self.running = False
self.create_widgets()
def create_widgets(self):
self.time_label = tk.Label(self, text="00:00:00", font=("Helvetica", 48))
self.time_label.pack(pady=20)
self.start_button = tk.Button(self, text="Start", command=self.start)
self.start_button.pack(side=tk.LEFT, padx=10)
self.stop_button = tk.Button(self, text="Stop", command=self.stop)
self.stop_button.pack(side=tk.LEFT, padx=10)
self.reset_button = tk.Button(self, text="Reset", command=self.reset)
self.reset_button.pack(side=tk.LEFT, padx=10)
def start(self):
if not self.running:
self.start_time = time.time() - self.elapsed_time
self.update_time()
self.running = True
def stop(self):
if self.running:
self.after_cancel(self.timer)
self.running = False
def reset(self):
self.elapsed_time = 0
self.update_time()
def update_time(self):
if self.running:
self.elapsed_time = time.time() - self.start_time
hours = int(self.elapsed_time // 3600)
minutes = int((self.elapsed_time % 3600) // 60)
seconds = int(self.elapsed_time % 60)
time_string = f"{hours:02d}:{minutes:02d}:{seconds:02d}"
self.time_label.config(text=time_string)
self.timer = self.after(1000, self.update_time)
if __name__ == "__main__":
stopwatch = Stopwatch()
stopwatch.mainloop()
|
cs |
실행화면
표시 레이블 아래에는 "시작", "중지" 및 "재설정"의 세 가지 버튼이 있습니다.
- "시작" 버튼을 클릭하면 스톱워치가 시작되고 경과 시간이 실시간으로 증가하기 시작합니다.
- "정지" 버튼은 스톱워치를 일시 중지하여 경과 시간을 정지시킵니다.
- "재설정" 버튼은 경과 시간을 0으로 재설정합니다.
경과 시간은 time 모듈의 time() 함수를 사용하여 계산됩니다. start() 메서드는 시작 시간을 기록하고 현재 시간에서 시작 시간을 빼 경과 시간을 지속적으로 업데이트합니다. 경과 시간은 시, 분, 초로 형식화되어 시간 레이블에 표시됩니다.
stop() 메소드는 업데이트 루프를 취소하여 스톱워치를 효과적으로 일시 중지하고 reset() 메소드는 경과 시간을 0으로 재설정하고 그에 따라 시간 레이블을 업데이트합니다.
update_time() 메서드는 매초(1,000밀리초) 시간 레이블을 업데이트하는 역할을 합니다. 경과 시간을 계산하고 형식을 지정한 다음 새 시간으로 레이블을 업데이트합니다. 'after()' 메서드는 1초 지연 후 경과 시간의 다음 업데이트를 예약합니다.
Stopwatch 클래스의 인스턴스를 만들고 mainloop() 메서드를 호출하면 애플리케이션의 이벤트 루프가 시작되어 사용자가 스톱워치 버튼과 상호 작용하고 경과 시간을 실시간으로 볼 수 있습니다.
8. 결론 및 의견
Python과 Tkinter를 사용하여 스톱워치 애플리케이션을 구축해 봤습니다. 그래픽 사용자 인터페이스를 만들고, 스톱워치 기능을 구현하고, 경과 시간을 업데이트하는 방법까지 공부했는데요, 랩 타임, 랩 카운터 또는 보다 시각적으로 매력적인 디자인과 같은 기능을 추가하여 응용 프로그램을 자유롭게 사용자 지정하고 향상시킬 수 있습니다.
[관련글]
[정보 및 유용한 팁] - 챗GPT 란? (CHAT GPT 사용)
[파이썬 (pythoon)] - 파이썬 벽돌깨기 게임 만들기 - python tkinter game
[유용한 사이트모음] - 깃허브(GitHub) 파일 다운로드 - 소스코드
[파이썬 (pythoon)] - Python Tkinter를 이용한 텍스트 편집기(Text Editor) 만들기
'파이썬 (pythoon)' 카테고리의 다른 글
Python Tkinter 사용 날씨 앱 프로그램 (Weather API) (0) | 2023.06.19 |
---|---|
Python Tkinter를 사용하여 상태 표시줄 만들기 (0) | 2023.06.18 |
파이썬 Tkinter 이미지 뷰어 프로그램 만들기 (0) | 2023.06.17 |
Python tkinter 제곱근, 로그, sin 각도 공업용 함수 계산기 만들기 (1) | 2023.06.17 |
Python Tkinter 파일 탐색기(FileDialog) 만들기 방법 (0) | 2023.06.17 |