-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhelloworld.py
More file actions
114 lines (91 loc) · 3.12 KB
/
helloworld.py
File metadata and controls
114 lines (91 loc) · 3.12 KB
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
import streamlit as st
# global environment store into st.session_state
# set a easy way to access
class Env():
# save all your variables inside st.session_state
def __init__(self):
if not self.has("working_step"):
st.session_state.working_step = 1
if not self.has("show"):
st.session_state.show = Show()
if not self.has("app"):
st.session_state.app = App()
def __getattr__(self, key):
if key not in st.session_state:
raise AttributeError(f"Invalid access to st.session_state, key = {key}")
else:
return st.session_state[key]
def __setattr__(self, key, value):
st.session_state[key] = value
def __getitem__(self, key):
if key not in st.session_state:
raise AttributeError(f"Invalid access to st.session_state, key = {key}")
else:
return st.session_state[key]
def __setitem__(self, key, value):
st.session_state[key] = value
def __len__(self, key):
return len(st.session_state[key])
def has(self, key):
if key not in st.session_state:
return False
else:
return True
# manage all layout
class Show():
show_app_header = None
show_hello = None
def __init__(self):
self.show_app_header = st.empty()
self.show_hello = st.empty()
def run(self):
self.show_app_header.header("Hello world ...")
if env.working_step == 1:
self.show_step1()
elif env.working_step == 2:
self.show_step2()
else:
raise ValueError(f"{self.working_step}")
def show_step1(self):
self.show_hello.empty()
cav = self.show_hello.container(border = True)
cav.write("Step 1")
text = cav.text_input(label = "What's your name?",
value="",
on_change =env.app.on_change_name_input)
# other way to pass the input value is by st.session_state.key_str, which break the way we encapsulate the environment
if text:
env.app.set_name(text)
cav.button("Go Next step", on_click=env.app.on_click1)
def show_step2(self):
self.show_hello.empty()
cav = self.show_hello.container(border = True)
cav.write("Step 2")
cav.write("Hello, " + env.app.get_name())
cav.button("Finish, we go back step 1", on_click=env.app.on_click2)
class App():
hello_message2 = ""
name = ""
show_name = ""
def set_name(self, s):
self.name = s
def get_name(self):
return self.show_name
def on_change_name_input(self):
pass
def on_click1(self):
# your business logic here
if self.name == "":
self.show_name = "Stranger"
else:
self.show_name = self.name
# goto next step
env.working_step = 2
def on_click2(self):
# your business logic here
self.name = ""
# goto other step, here we back step 1.
env.working_step = 1
# start the program
env = Env()
env.show.run()