Spaces:
Running
Running
import streamlit as st | |
import os | |
import random | |
# πΌοΈ 1. Display two columns, each with a random image from the current directory | |
def display_images(image_dir): | |
"""πΌοΈ Function 1: Displays two random images side by side for voting, filtered to only show image files.""" | |
col1, col2 = st.columns(2) | |
# ποΈ Load and filter only image files from the directory | |
valid_extensions = ('.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff', '.webp') # Common image file types | |
images = [f for f in os.listdir(image_dir) if f.lower().endswith(valid_extensions)] | |
if len(images) < 2: | |
st.error("Not enough images in the directory.") | |
return | |
# πΈ Randomly select two *unique* images | |
image1, image2 = random.sample(images, 2) | |
with col1: | |
st.image(os.path.join(image_dir, image1)) | |
if st.button(f"Upvote {image1}", key=f"upvote_{image1}"): # Use image filename as key | |
handle_vote(image1) | |
with col2: | |
st.image(os.path.join(image_dir, image2)) | |
if st.button(f"Upvote {image2}", key=f"upvote_{image2}"): # Use image filename as key | |
handle_vote(image2) | |
# π― 2. Handle the voting logic and store the history | |
def handle_vote(image_name): | |
"""π― Function 2: Handles voting and stores vote history.""" | |
# β Save the upvote to session state or database | |
if 'vote_history' not in st.session_state: | |
st.session_state['vote_history'] = {} | |
if image_name in st.session_state['vote_history']: | |
st.session_state['vote_history'][image_name] += 1 | |
else: | |
st.session_state['vote_history'][image_name] = 1 | |
st.success(f"Upvoted {image_name}! Total votes: {st.session_state['vote_history'][image_name]}") | |
# π 3. Sidebar to show vote history | |
def show_vote_history(): | |
"""π Function 3: Displays the vote history in the sidebar.""" | |
st.sidebar.title("Vote History") | |
if 'vote_history' in st.session_state: | |
for image_name, votes in st.session_state['vote_history'].items(): | |
st.sidebar.write(f"{image_name}: {votes} votes") | |
else: | |
st.sidebar.write("No votes yet!") | |
# βοΈ 4. Main function to structure app execution | |
def main(): | |
"""βοΈ Function 4: Main function to run the app.""" | |
st.title("Image Voting App") | |
# π¨ Set up the sidebar for vote history | |
show_vote_history() | |
# πΌοΈ Display images for voting | |
image_dir = '.' # Current directory where the app is running | |
display_images(image_dir) | |
# π 5. Run the app | |
if __name__ == "__main__": | |
main() | |