add experimental streamlit integration
This commit is contained in:
parent
3ffc0a060a
commit
38cb5fb623
@ -81,15 +81,42 @@ def set_pixels(color):
|
|||||||
# @click.option("-v", help="Set HEX Color as base visualizer color: -v ffffff")
|
# @click.option("-v", help="Set HEX Color as base visualizer color: -v ffffff")
|
||||||
def main(arg):
|
def main(arg):
|
||||||
if arg == ():
|
if arg == ():
|
||||||
proc = subprocess.Popen(["python", "-m", "streamlit", "run", "/var/lib/lc/gui.py", "--server.headless", "True", "--theme.base", "dark", "--theme.primaryColor", "#9f0000", "--theme.backgroundColor", "#181a1b", "--theme.secondaryBackgroundColor", "#1f2123", "--theme.textColor", "#c4c0b8"], stdout=subprocess.PIPE)
|
# proc = subprocess.Popen(["python", "-m", "streamlit", "run", "/var/lib/lc/gui.py", "--server.headless", "True", "--theme.base", "dark", "--theme.primaryColor", "#9f0000", "--theme.backgroundColor", "#181a1b", "--theme.secondaryBackgroundColor", "#1f2123", "--theme.textColor", "#c4c0b8"], stdout=subprocess.PIPE)
|
||||||
for line in proc.stdout:
|
# for line in proc.stdout:
|
||||||
if line == b' You can now view your Streamlit app in your browser.\n':
|
# if line == b' You can now view your Streamlit app in your browser.\n':
|
||||||
break
|
# break
|
||||||
|
|
||||||
|
import streamlit.web.bootstrap as bootstrap
|
||||||
|
from streamlit import config
|
||||||
|
import gui as gui
|
||||||
|
|
||||||
|
di = {'global_disableWatchdogWarning': None, 'global_showWarningOnDirectExecution': None, 'global_developmentMode': None, 'global_logLevel': None, 'global_unitTest': None, 'global_suppressDeprecationWarnings': None, 'global_minCachedMessageSize': None, 'global_maxCachedMessageAge': None, 'global_dataFrameSerialization': None, 'logger_level': None, 'logger_messageFormat': None, 'logger_enableRich': None, 'client_caching': None, 'client_displayEnabled': None, 'client_showErrorDetails': None, 'runner_magicEnabled': None, 'runner_installTracer': None, 'runner_fixMatplotlib': None, 'runner_postScriptGC': None, 'runner_fastReruns': None, 'server_folderWatchBlacklist': None, 'server_fileWatcherType': None, 'server_cookieSecret': None, 'server_headless': True, 'server_runOnSave': None, 'server_allowRunOnSave': None, 'server_address': None, 'server_port': None, 'server_scriptHealthCheckEnabled': None, 'server_baseUrlPath': None, 'server_enableCORS': None, 'server_enableXsrfProtection': None, 'server_maxUploadSize': None, 'server_maxMessageSize': None, 'server_enableWebsocketCompression': None, 'browser_serverAddress': None, 'browser_gatherUsageStats': None, 'browser_serverPort': None, 'ui_hideTopBar': None, 'ui_hideSidebarNav': None, 'mapbox_token': None, 'deprecation_showfileUploaderEncoding': None, 'deprecation_showImageFormat': None, 'deprecation_showPyplotGlobalUse': None, 'theme_base': None, 'theme_primaryColor': None, 'theme_backgroundColor': None, 'theme_secondaryBackgroundColor': None, 'theme_textColor': None, 'theme_font': None}
|
||||||
|
|
||||||
|
import multiprocessing
|
||||||
|
|
||||||
|
def run():
|
||||||
|
config.set_option('server.headless', True)
|
||||||
|
bootstrap.run(gui.__file__, 'streamlit run gui.py --server.headless True', [], di)
|
||||||
|
|
||||||
|
p = multiprocessing.Process(target=run)
|
||||||
|
p.start()
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
print(requests.get('http://localhost:8501'))
|
||||||
|
except:
|
||||||
|
continue
|
||||||
|
print('asdf')
|
||||||
|
break
|
||||||
|
# cli.main_run(str(gui.__file__))
|
||||||
webview.create_window('LED Control', 'http://localhost:8501')
|
webview.create_window('LED Control', 'http://localhost:8501')
|
||||||
webview.start()
|
webview.start()
|
||||||
proc.terminate()
|
# proc.terminate()
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
|
|
||||||
match arg[0]:
|
match arg[0]:
|
||||||
case "help":
|
case "help":
|
||||||
print("lc [help|set|search|list]")
|
print("lc [help|set|search|list]")
|
||||||
|
|||||||
@ -1,33 +1,76 @@
|
|||||||
import streamlit as st
|
|
||||||
import controller
|
|
||||||
import colorsys
|
|
||||||
hide_streamlit_style = """
|
|
||||||
<style>
|
|
||||||
#MainMenu {visibility: hidden;}
|
|
||||||
footer {visibility: hidden;}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
"""
|
def main():
|
||||||
st.markdown(hide_streamlit_style, unsafe_allow_html=True)
|
import streamlit as st
|
||||||
|
import controller
|
||||||
|
import colorsys
|
||||||
|
import pickle
|
||||||
|
import os
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
def hex_to_rgb(hex):
|
hide_streamlit_style = """
|
||||||
r = int(hex[1:3],16)
|
<style>
|
||||||
g = int(hex[3:5],16)
|
#MainMenu {visibility: hidden;}
|
||||||
b = int(hex[5:7],16)
|
footer {visibility: hidden;}
|
||||||
return r,g,b
|
</style>
|
||||||
|
|
||||||
def rgb_to_hex(r,g,b):
|
"""
|
||||||
return "#" + hex(r)[2:].zfill(2) + hex(g)[2:].zfill(2) + hex(b)[2:].zfill(2)
|
st.markdown(hide_streamlit_style, unsafe_allow_html=True)
|
||||||
|
|
||||||
st.title("LED Control")
|
def hex_to_rgb(hex):
|
||||||
|
r = int(hex[1:3],16)
|
||||||
|
g = int(hex[3:5],16)
|
||||||
|
b = int(hex[5:7],16)
|
||||||
|
return r,g,b
|
||||||
|
|
||||||
# r = st.slider("Red", 0, 255, 0)
|
def rgb_to_hex(r,g,b):
|
||||||
# g = st.slider("Green", 0, 255, 0)
|
return "#" + hex(r)[2:].zfill(2) + hex(g)[2:].zfill(2) + hex(b)[2:].zfill(2)
|
||||||
# b = st.slider("Blue", 0, 255, 0)
|
|
||||||
h = st.slider("Hue", 0.0, 1.0, 0.0, 0.01)
|
def load_config():
|
||||||
s = st.slider("Saturation", 0.0, 1.0, 0.0, 0.01)
|
try:
|
||||||
v = st.slider("Value", 0.0, 1.0, 0.0, 0.01)
|
path = os.path.expanduser("~/.config/lc/lc.dmp")
|
||||||
r,g,b = colorsys.hsv_to_rgb(h,s,v)
|
with open(path, 'rb') as f:
|
||||||
color = rgb_to_hex(int(r * 255),int(g * 255),int(b * 255))
|
return pickle.load(f)
|
||||||
controller.set_pixels(color[1:])
|
except FileNotFoundError:
|
||||||
color
|
return {'color': '000000', 'saved': []}
|
||||||
|
|
||||||
|
|
||||||
|
def save(conf):
|
||||||
|
path = os.path.expanduser("~/.config/lc/lc.dmp")
|
||||||
|
with open(path, 'wb') as f:
|
||||||
|
pickle.dump(conf, f)
|
||||||
|
|
||||||
|
def add_to_conf():
|
||||||
|
st.session_state.config['saved'].append(color)
|
||||||
|
|
||||||
|
init = 0
|
||||||
|
if 'config' not in st.session_state:
|
||||||
|
init = 1
|
||||||
|
st.session_state.config = load_config()
|
||||||
|
color = st.session_state.config['color']
|
||||||
|
|
||||||
|
st.title("LED Control")
|
||||||
|
|
||||||
|
# r = st.slider("Red", 0, 255, 0)
|
||||||
|
# g = st.slider("Green", 0, 255, 0)
|
||||||
|
# b = st.slider("Blue", 0, 255, 0)
|
||||||
|
h = st.slider("Hue", 0.0, 1.0, 0.0, 0.01)
|
||||||
|
s = st.slider("Saturation", 0.0, 1.0, 0.0, 0.01)
|
||||||
|
v = st.slider("Value", 0.0, 1.0, 0.0, 0.01)
|
||||||
|
if init == 0:
|
||||||
|
r,g,b = colorsys.hsv_to_rgb(h,s,v)
|
||||||
|
color = rgb_to_hex(int(r * 255),int(g * 255),int(b * 255))
|
||||||
|
|
||||||
|
|
||||||
|
st.session_state.config['color'] = color[1:]
|
||||||
|
save(st.session_state.config)
|
||||||
|
controller.set_pixels(color[1:])
|
||||||
|
img = Image.new(mode="RGB", size=(30,30), color=(int(r * 255),int(g * 255),int(b * 255)))
|
||||||
|
|
||||||
|
st.subheader(color)
|
||||||
|
st.image(img)
|
||||||
|
st.button("Save Color", add_to_conf)
|
||||||
|
st.session_state.config['saved']
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user