File size: 4,423 Bytes
eadf58c 49e2a28 eadf58c 49e2a28 085019b eadf58c 085019b 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 085019b ec30f42 085019b 49e2a28 eadf58c 49e2a28 eadf58c ec30f42 eadf58c ec30f42 49e2a28 eadf58c ec30f42 49e2a28 eadf58c ec30f42 49e2a28 eadf58c ec30f42 085019b 49e2a28 ec30f42 eadf58c ec30f42 eadf58c ec30f42 |
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
import streamlit as st
import time
import pytz
from datetime import datetime
import matplotlib.pyplot as plt
# Set page configuration
st.set_page_config(page_title="MK316 Quiet Timer", layout="centered")
# Initialize session state for countdown
if "countdown_started" not in st.session_state:
st.session_state.countdown_started = False
if "start_time" not in st.session_state:
st.session_state.start_time = 0
if "remaining_time" not in st.session_state:
st.session_state.remaining_time = 0
if "time_up" not in st.session_state:
st.session_state.time_up = False
# Title
st.title("🐧 MK316 Quiet Timer ⏳ ")
# Function to display the current time (as a live digital clock)
def display_current_time(current_time_placeholder):
seoul_tz = pytz.timezone('Asia/Seoul') # Set timezone to Seoul
current_time = datetime.now(seoul_tz).strftime("%H:%M:%S") # Convert to Seoul time
# Style the clock (increase font size and set color)
current_time_placeholder.markdown(
f"<h1 style='text-align: center; font-size: 80px; color: #5785A4;'>{current_time}</h1>", # Large font
unsafe_allow_html=True
)
# Function to update the progress circle
def update_progress_circle(remaining_time, total_time):
fig, ax = plt.subplots(figsize=(2, 2)) # Smaller figure size to fit layout
fraction_completed = remaining_time / total_time if total_time > 0 else 0
ax.pie([fraction_completed, 1 - fraction_completed], colors=['#5785A4', '#D5DEDD'], startangle=90, counterclock=False, wedgeprops=dict(width=0.3))
minutes, seconds = divmod(remaining_time, 60)
ax.text(0, 0, f"{int(minutes):02d}:{int(seconds):02d}", fontsize=14, va='center', ha='center') # Remaining time
ax.set_aspect('equal')
return fig
# Function to start the countdown timer
def start_countdown():
if not st.session_state.countdown_started:
st.session_state.remaining_time = st.session_state.start_time
st.session_state.countdown_started = True
st.session_state.time_up = False
# Function to reset the countdown timer
def reset_countdown():
st.session_state.start_time = 0
st.session_state.remaining_time = 0
st.session_state.countdown_started = False
st.session_state.time_up = False
# Input field for countdown time in seconds
st.session_state.start_time = st.number_input("Set Countdown Time (in seconds)", min_value=0, max_value=3600, value=10)
# Two columns: one for current time and buttons, another for circular progress
col1, col2 = st.columns([2, 1])
# Left column: Current time, input, buttons
with col1:
# Placeholder to display the current time
current_time_placeholder = st.empty()
# Buttons to Start and Reset the countdown
start_button, reset_button = st.columns([1, 1])
with start_button:
if st.button("Start"):
start_countdown()
with reset_button:
if st.button("Reset"):
reset_countdown()
# Placeholder for displaying countdown text message
countdown_placeholder = st.empty()
# Right column: Circular progress chart
with col2:
progress_placeholder = st.empty()
# Timer countdown loop (only runs when countdown has started)
if st.session_state.countdown_started and not st.session_state.time_up:
while st.session_state.remaining_time > 0:
# Display the circular progress chart with time in the center
fig = update_progress_circle(st.session_state.remaining_time, st.session_state.start_time)
progress_placeholder.pyplot(fig)
# Display countdown time
minutes, seconds = divmod(st.session_state.remaining_time, 60)
countdown_placeholder.write(f"**Remaining Time:** {int(minutes):02d}:{int(seconds):02d}")
# Update the remaining time
st.session_state.remaining_time -= 1
# Sleep for a second
time.sleep(1)
# Update current time in the placeholder
display_current_time(current_time_placeholder)
# When the countdown finishes
st.session_state.time_up = True
fig = update_progress_circle(0, st.session_state.start_time)
progress_placeholder.pyplot(fig)
countdown_placeholder.write("⏰ **Time's Up!**")
# Play the sound using Streamlit's audio player
audio_file = open("timesup.mp3", "rb")
st.audio(audio_file.read(), format="audio/mp3")
st.session_state.countdown_started = False
|