File size: 4,172 Bytes
eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 eadf58c 49e2a28 |
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 |
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():
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)
st.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:
# Display current time
display_current_time()
# 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 logic (runs when countdown has started)
if st.session_state.countdown_started and not st.session_state.time_up:
if st.session_state.remaining_time > 0:
# Update 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)
# Update the remaining time
st.session_state.remaining_time -= 1
# Sleep for a second
time.sleep(1)
# Rerun the app to update every second
st.experimental_rerun()
else:
# When the countdown finishes, display "Time's Up!" inside the circle
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
|