파이썬 (pythoon)

Python Tkinter 스톱워치 응용 프로그램 구축

working for you 2023. 6. 17. 15:34
반응형

스톱워치는 시간을 정확하게 측정하고 추적하는 데 유용한 도구입니다. 운동 시간을 측정하거나 학습 세션을 추적하거나 이벤트 기간을 측정해야 하는 경우 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(1000self.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 사용)

 

챗GPT 란? (CHAT GPT 사용)

챗GPT 란 무엇일까요? 요즘 너무 핫하다 못해 마치 옆에 있는 선생님처럼 느껴지는 이 인공지능 AI에 대해서 이해하기 쉽게 정리하려 합니다. 결론적으로 챗GPT에게 질문을 하면, 형식적인 답이 아

2toy.net

[파이썬 (pythoon)] - 파이썬 벽돌깨기 게임 만들기 - python tkinter game

 

파이썬 벽돌깨기 게임 만들기 - python tkinter game

Python을 활용하여 Tkinter의 기능을 최대한 적용 후 몇줄 안되는 코딩으로 파이썬 벽돌깨기 게임 만들기 및 방법을 알아보려 합니다. pygame 라이브러리 없이 Canvas 위젯을 사용해서 생각보다 어렵지

2toy.net

[유용한 사이트모음] - 깃허브(GitHub) 파일 다운로드 - 소스코드

 

깃허브(GitHub) 파일 다운로드 - 소스코드

오늘은 깃허브(GitHub) 파일 다운로드 방법에 대해 알아보려 합니다. 깃허브(GitHub)란 개발자들이 소스 코드를 관리하고 협업하는 데 널리 사용되는 웹 기반 호스팅 서비스입니다. 오픈 소스 프로

2toy.net

[파이썬 (pythoon)] - Python Tkinter를 이용한 텍스트 편집기(Text Editor) 만들기

 

Python Tkinter를 이용한 텍스트 편집기(Text Editor) 만들기

파이썬 GUI 툴킷인 Tkinter는 Python과 함께 제공되며 사용자 친화적이고 효율적인 대화형 애플리케이션을 만들 수 있는 방법을 제공합니다. 이번 글에서는 Python Tkinter를 사용하여 텍스트 편집기(text

2toy.net

[파이썬 (pythoon)] - Python Tkinter를 사용한 채팅 프로그램 만들기

 

Python Tkinter를 사용한 채팅 프로그램 만들기

Python Tkinter는 Python에서 그래픽 사용자 인터페이스(GUI)를 사용하여 채팅 응용 프로그램을 구축하는 방법을 살펴봅니다. 이 자습서를 따라 기능 및 대화형 채팅 인터페이스를 만드는 데 필요한 기

2toy.net

반응형