import streamlit as st
import pandas as pd
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from datetime import datetime
# Set page title and favicon
st.set_page_config(page_title="고민 해결사", page_icon=":sunglasses:")
# Google Sheets 인증 설정
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("analog-marking-416002-e369840763fa.json", scope)
client = gspread.authorize(creds)
# Google Sheets 문서 열기
sheet = client.open("generation_streamlit_0302").sheet1
# 사용자 조언 데이터를 Google Sheets 문서에 추가하는 함수
def record_advice(experience, concern, advice):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
sheet.append_row([timestamp, experience, concern, advice])
# 스타일링을 위한 CSS
st.markdown("""
""", unsafe_allow_html=True)
# 헤더 표시
st.markdown('
', unsafe_allow_html=True)
# 사용자 안내 문구 표시
st.markdown("""
How to use
1. 조언을 해주고 싶은 팀장 연차를 골라주세요.
2. 버튼을 클릭하면 선택된 연차의 고민 중 하나가 랜덤으로 표시됩니다.
3. 고민 아래에 위치한 입력 창에 조언을 작성한 후, '조언 제출하기' 버튼을 눌러주세요.
4. 아래에 성공적으로 제출되었다는 초록색 메시지가 뜨는 것을 확인해주세요.
""", unsafe_allow_html=True)
# Load Excel file into DataFrame
df = pd.read_excel("painpoint21.xlsx")
# 버튼 컨테이너 생성
buttons = st.columns(3)
experience_levels = ['저연차 팀장', '중간연차 팀장', '고연차 팀장']
selected_concern = None
# 버튼 생성 및 이벤트 처리
for i, experience_level in enumerate(experience_levels):
with buttons[i]:
if st.session_state.get(experience_level):
st.button(experience_level, disabled=True) # 활성화된 버튼 비활성화 표시
elif st.button(experience_level):
# 선택된 experience_level을 저장
st.session_state['experience'] = experience_level # 이 부분이 추가됨
st.session_state[experience_level] = True
with st.spinner("고민을 랜덤으로 뽑는 중입니다. 잠시 기다려주세요..."):
concerns = df[experience_level].dropna()
if not concerns.empty:
selected_concern = concerns.sample(n=1).iloc[0]
st.session_state['selected_concern'] = selected_concern
else:
st.error(f"{experience_level}에 해당하는 고민이 없습니다.")
# 선택된 고민 내용을 전체 화면에 표시
if 'selected_concern' in st.session_state:
st.markdown(f"선택된 고민:
", unsafe_allow_html=True)
st.markdown(f"{st.session_state['selected_concern']}
", unsafe_allow_html=True)
# 고민과 조언 요청 사이에 공간 추가
st.write("")
if 'selected_concern' in st.session_state:
advice = st.text_area(f"### 고민에 대한 조언을 입력해주세요:", key="advice_input", value="", height=200) # text_area의 높이를 조정합니다.
st.write("", unsafe_allow_html=True) # 버튼의 글자 크기를 조정합니다.
submit_advice_button = st.button("조언 제출하기")
if submit_advice_button and advice.strip():
record_advice(st.session_state['experience'], st.session_state['selected_concern'], advice)
st.success("조언이 성공적으로 제출되었습니다!")
# 사용자가 조언을 제출한 후 입력 필드를 비우는 대신, 사용자에게 페이지 새로고침을 유도
st.markdown("새로운 고민을 살펴보려면, 페이지를 새로고침해주세요.")