In [8]:
from Custom.mediahelper import show_video_as_html # 개발자 정의 모듈
09. 프로그레스 바¶
1. determinate 모드 - 기본 진행바¶
In [2]:
import tkinter as tk
from tkinter import ttk
import time # 진행바의 동작을 테스트하기 위해 사용
root = tk.Tk()
# 윈도우 설정
title_name = "YongSeokha Tkinter Project"
root.title(title_name) # 윈도우 제목 설정
root.geometry("340x240") # 윈도우 크기 설정 (가로 x 세로)
# ===== 프레임 생성 =====
# 진행바와 버튼을 포함할 프레임 생성
frame = tk.Frame(root)
frame.pack(padx=10, pady=10) # 프레임 여백 설정
# ===== Progressbar 1 (Determinate 모드) =====
# determinate 모드: 진행 상태를 특정 값으로 수동 업데이트
progressbar1 = ttk.Progressbar(
frame,
maximum=100, # 진행의 최대값 (100% 기준)
mode="determinate", # 진행 모드 설정: "determinate"는 특정 값으로 진행을 표시
length=200 # 진행바의 길이 (픽셀 단위, 가로 기준)
# orient=tk.VERTICAL # 진행 방향: 가로 기본값을 세로 방향으로 변경할 수 있음
)
progressbar1.pack(pady=10) # 진행바 배치와 상하 여백 설정
# ===== 진행 상태 관리 변수 =====
current_value1 = 0 # 현재 진행 상태를 저장할 변수 (0~100)
running1 = False # 진행 중 여부를 나타내는 플래그 변수
# ===== Progressbar 1 제어 함수 =====
def start_progress1():
"""
진행바를 시작하는 함수
"""
global current_value1, running1 # 전역 변수 사용 선언
running1 = True # 진행 상태를 활성화
for i in range(current_value1 + 1, 101): # 현재 값부터 100까지 진행
if not running1: # 진행 중단 요청이 있으면 종료
break
time.sleep(0.01) # 0.01초 대기 (진행 속도 설정)
progressbar1["value"] = i # 진행바 값을 업데이트
progressbar1.update() # UI를 새로고침하여 즉시 반영
current_value1 = i # 현재 진행 상태 업데이트
def stop_progress1():
"""
진행을 멈추는 함수
"""
global running1
running1 = False # 진행 상태를 비활성화
def reset_progress1():
"""
진행바를 초기화하는 함수
"""
global current_value1
progressbar1["value"] = 0 # 진행바 값을 0으로 설정
current_value1 = 0 # 진행 상태 변수도 0으로 초기화
# ===== 버튼 생성 =====
# 진행바를 제어하기 위한 버튼
tk.Button(frame, text="Start 1", command=start_progress1).pack() # 시작 버튼
tk.Button(frame, text="Stop 1", command=stop_progress1).pack() # 중단 버튼
tk.Button(frame, text="Reset 1", command=reset_progress1).pack() # 초기화 버튼
# ===== 메인 이벤트 루프 =====
root.mainloop() # Tkinter GUI 실행
In [9]:
show_video_as_html("../Media/video_09-1.mp4")
'Video'
2. indeterminate 모드 - 진행 상황을 알 수 없는 진행바(자동 움직임)¶
- indeterminate 모드는 실제 값을 추적하지 않기 때문에 리셋 시 진행상태를 초기화할 필요는 없음.
In [4]:
from tkinter import *
from tkinter import ttk
root = Tk()
# 윈도우 설정
title_name = "YongSeokha Tkinter Project"
root.title(title_name) # 윈도우 제목 설정
root.geometry("640x240") # 윈도우 크기 설정 (가로 x 세로)
# ===== 프레임 생성 =====
# 진행바와 버튼을 포함할 프레임 생성
frame = Frame(root)
frame.pack(padx=10, pady=10) # 프레임 여백 설정
# ===== Progressbar 2 (Indeterminate 모드) =====
# indeterminate 모드: 진행 상태를 알 수 없는 상황에서 사용
progressbar2 = ttk.Progressbar(
frame,
maximum=100, # (옵션) 진행바의 최대값 (indeterminate 모드에서는 의미 없음)
mode="indeterminate", # 진행 모드 설정: 알 수 없는 진행 상태를 표시
length=200 # 진행바의 길이 (픽셀 단위, 기본 가로 방향)
# orient=tk.VERTICAL # 진행 방향을 세로로 설정할 수 있음
)
progressbar2.pack(pady=10) # 진행바 배치와 상하 여백 설정
# ===== Progressbar 2 제어 함수 =====
def start_progress2():
"""
indeterminate 모드에서 진행바를 시작하는 함수
"""
progressbar2.start(10) # 진행바 애니메이션 시작 (속도는 10ms 단위로 설정)
def stop_progress2():
"""
진행바를 멈추는 함수
"""
progressbar2.stop() # 진행바 애니메이션 중지
# ===== 버튼 생성 =====
# 진행바를 제어하기 위한 버튼
Button(frame, text="Start 2", command=start_progress2).pack() # 시작 버튼
Button(frame, text="Stop 2", command=stop_progress2).pack() # 중단 버튼
# ===== 메인 이벤트 루프 =====
root.mainloop() # Tkinter GUI 실행
In [10]:
show_video_as_html("../Media/video_09-2.mp4")
'Video'
3. variable 속성 활용 (determinate 모드)¶
In [6]:
import tkinter as tk
from tkinter import ttk
import time # 진행 상태 업데이트를 위한 대기 시간 제어
root = tk.Tk()
# 윈도우 설정
title_name = "YongSeokha Tkinter Project"
root.title(title_name) # 윈도우 제목 설정
root.geometry("640x240") # 윈도우 크기 설정 (가로 x 세로)
# ===== 프레임 생성 =====
# 진행바와 버튼을 포함할 프레임 생성
frame = tk.Frame(root)
frame.pack(padx=10, pady=10) # 프레임 여백 설정
# ===== Progressbar 3 (Determinate 모드, variable 사용) =====
# Determinate 모드: 진행 상태를 수동으로 업데이트하며, 특정 값을 표시
# variable 속성을 사용하여 진행 상태를 동적으로 설정 가능
p_var3 = tk.DoubleVar() # 진행 상태를 저장할 DoubleVar 변수 생성 (0.0~100.0)
progressbar3 = ttk.Progressbar(
frame,
maximum=100, # 진행의 최대값 (100% 기준)
length=200, # 진행바의 길이 (픽셀 단위, 기본 가로 방향)
variable=p_var3, # 진행 상태를 동적으로 제어할 변수 연결
mode="determinate" # 진행 모드: determinate로 설정
)
progressbar3.pack(pady=10) # 진행바 배치 및 상하 여백 설정
# ===== 진행 상태 관리 변수 =====
current_value3 = 0 # 현재 진행 상태를 저장할 변수 (0~100)
running3 = False # 진행 중 여부를 나타내는 플래그 변수
# ===== Progressbar 3 제어 함수 =====
def start_progress3():
"""
진행바를 시작하는 함수
"""
global current_value3, running3 # 전역 변수 사용 선언
running3 = True # 진행 상태를 활성화
for i in range(current_value3 + 1, 101): # 현재 값부터 100까지 진행
if not running3: # 진행 중단 요청이 있으면 종료
break
time.sleep(0.01) # 0.01초 대기 (진행 속도 설정)
p_var3.set(i) # 진행 상태를 p_var3 변수에 설정
progressbar3.update() # UI를 새로고침하여 즉시 반영
current_value3 = i # 현재 진행 상태 업데이트
def stop_progress3():
"""
진행을 멈추는 함수
"""
global running3, current_value3
running3 = False # 진행 상태 비활성화
p_var3.set(current_value3) # 현재 진행 상태 유지
def reset_progress3():
"""
진행바를 초기화하는 함수
"""
global current_value3
p_var3.set(0) # 진행 상태를 0으로 초기화
current_value3 = 0 # 진행 상태 변수 초기화
# ===== 버튼 생성 =====
# 진행바를 제어하기 위한 버튼
tk.Button(frame, text="Start 3", command=start_progress3).pack() # 시작 버튼
tk.Button(frame, text="Stop 3", command=stop_progress3).pack() # 중단 버튼
tk.Button(frame, text="Reset 3", command=reset_progress3).pack() # 초기화 버튼
# ===== 메인 이벤트 루프 =====
root.mainloop() # Tkinter GUI 실행
In [11]:
show_video_as_html("../Media/video_09-3.mp4")
'Video'
'Python > Tkinter' 카테고리의 다른 글
11. 메시지 박스 (0) | 2024.11.20 |
---|---|
10. 메뉴 탭 생성 (1) | 2024.11.20 |
08. 콤보 박스 (0) | 2024.11.20 |
07. 라디오 버튼(단일 선택) (0) | 2024.11.20 |
06. 체크 박스(다중 선택 가능) (0) | 2024.11.20 |