프로젝트를 진행하면서 나는 커맨드나 vscode 등을 통해서 코드를 실행하거나 결과를 볼 수 있는데, 일반 사용자들은 그럴 수가 없고 또 이걸 웹이나 프로그램으로 만들자니 아직은 개발 중이기 때문에 gradio를 이용해서 간단하게 보여줄 화면을 제작하는데 맛이 들렸다. 제대로 공부한 것은 아니고, 그냥 하나씩 만들어보면서 그때그때 필요한 것들만 문서를 뒤적거리면서 찾아보고 있어서, 가끔씩 나타나는 찾아도 안 나오는 것들을 작성해보려고 한다.
gradio에 file explorer을 통해서 아래 이미지와 같이 디렉토리구조 및 파일을 열어 볼 수 있도록 하는 기능이 있는데, 맨 처음 서버가 켜질 때 기준으로만 디렉터리를 보여주고 켜져 있는 상태에서 파일들을 수정하여도 바뀌지가 않았고, 임의로 버튼을 만들어서 새로 FileExplorer 객체를 반환하도록 해봤지만 그래도 변하지 않았다. docs에도 새로고침 관련한 내용은 전혀 찾을 수 없어서 몇 시간을 뒤적거리다가 발견했다.(역시 모든 것은 답이 존재한다)
`gradio.FileExplorer` 에 여러 파라미터 중 `root_dir`이라는 파라미터가 말 그대로 루트 디렉토리를 의미하는데, 버그인지 의도인지는 모르겠지만 이 `root_dir`을 바꿔야만 객체를 새로 생성했을 때 새로 만들어졌다.(동일한 root_dir로 새로 만들면 변하지 않음)
따라서 우리가 원하는 새로고침을 하기 위해서는 `root_dir`을 쓰레기값으로 바꿨다가 다시 원래로 돌리면 새로고침이 되는 것이다~
def update_file_explorer(path):
return gr.FileExplorer(root_dir=path)
refresh_btn_train = gr.Button("새로고침")
with gr.Tab("Train Result"):
path_3 = gr.Textbox(label='Current Path', value=f"{train_result_path}",show_copy_button=True)
with gr.Group():
with gr.Row():
file_3 = gr.FileExplorer(
scale=1,
#glob="**/components/**/*.py",
value=["themes/utils"],
file_count="single",
root_dir=train_result_path,
elem_id="file",
)
code = gr.Code(lines=30, scale=2)
file_3.change(get_file_content, inputs=file_3, outputs=code)
refresh_btn_train.click(update_file_explorer, inputs = absolute_path_box, outputs=file_1).then(update_file_explorer, inputs = train_result_path_box, outputs=file_1)
위의 코드와 같은 식으로 새로운 FileExplorer을 반환해주는 함수와 새로고침 버튼을 하나 만들어둔 다음, 새로고침 버튼을 누르면 처음에는 임시값으로 바꿨다가 이후에 다시 원래값으로 바꿔주면 된다.
Reference
'알쓸신잡' 카테고리의 다른 글
pip bad interpreter (0) | 2024.11.20 |
---|---|
Gradio paste not working (0) | 2024.11.14 |
GitHub Copilot in the CLI (0) | 2024.11.08 |
[pgAdmin error] Your account is locked. Please contact the Administrator. (0) | 2024.10.18 |
Unable to install extension 'ms-toolsai.jupyter' as it is not compatible with VS Code (0) | 2024.09.27 |