Trends / app.py
gkdivya's picture
Update app.py
9732f2a
raw
history blame
3.02 kB
import streamlit as st
import json
st.set_page_config(layout='wide')
# Load furniture categories and attributes from a JSON file
def load_furniture_data():
with open('./config/furniture_taxonomy.json', 'r') as file:
data = json.load(file)
return data
def load_images():
with open('./config/images.json', 'r') as file:
images_data = json.load(file)
return images_data
# Custom CSS to style the buttons
st.markdown("""
<style>
.streamlit-button { background-color: #0052CC; color: white; }
</style>
""", unsafe_allow_html=True)
# Function to filter images based on selected options and category
def filter_images(images_data, selected_options, category):
matched_images = []
for image_name, image_info in images_data.items():
if image_info['category'] == category:
if all(image_info['attributes'][attribute] in options
for attribute, options in selected_options.items()):
matched_images.append(image_name)
return matched_images
# Function to display the main page
def main_page(furniture_data):
st.title("Social Media - What's Trending")
# Dictionary to store selected options for each attribute
selected_options = {}
# Dropdown for selecting furniture category
categories = list(furniture_data['Furniture'].keys())
brands = ['Arhaus', 'Crate&Barrel', 'Williams Sonoma', 'Pottery Barn', 'West Elm', 'Z Gallerie']
col1, col2, col3 = st.columns(3)
with col1:
category = st.selectbox('Select Category', ['Apparel', 'Furnitures', 'Beauty'])
with col2:
brand = st.selectbox('Select Brand', brands)
with col3:
selected_category = st.selectbox('Select Category', categories)
# Load attributes based on the selected category
attributes = furniture_data['Furniture'][selected_category]['attributes']
columns = st.columns(len(attributes))
# Create a multi-select widget for each attribute with a unique key
for i, (attribute, options) in enumerate(attributes.items()):
with columns[i]:
key = f"{selected_category}_{attribute}" # Unique key combining category and attribute
selected_options[attribute] = st.multiselect(f'Choose {attribute}', options, key=key)
if st.button('Show Filtered Images'):
# Assuming images_data is loaded from your JSON file
images_data = load_images() # Make sure this function is defined and loads your images data
filtered_images = filter_images(images_data, selected_options, selected_category)
if filtered_images:
for image in filtered_images:
st.image('./images/'+image, width=300) # Adjust width as needed
else:
st.write("Not Trending")
# Main app logic
furniture_data = load_furniture_data()
if 'page' not in st.session_state:
st.session_state.page = 'main'
if st.session_state.page == 'main':
main_page(furniture_data)