Button to select folder from local system

Following are the 2 scripts:
folder_selector.py

import tkinter as tk
from tkinter import filedialog
import sys
import json


def select_folder():
    root = tk.Tk()
    root.withdraw()  # Hide the main window
    folder_path = filedialog.askdirectory()  # Open the dialog to select a folder
    if folder_path:
        print(json.dumps({"folder_path": folder_path}))
    root.destroy()

if __name__ == "__main__":
    select_folder()

local_path_set.py

import streamlit as st
import subprocess
import json
import os

def main():
    st.title("Folder Selection and Management")

    if st.button("Select Folder"):
        result = subprocess.run(["python", "folder_selector.py"], capture_output=True, text=True)
        if result.returncode == 0:
            folder_data = json.loads(result.stdout)
            folder_path = folder_data.get("folder_path")
            if folder_path:
                st.success(f"Selected Folder: {folder_path}")
                required_folders = ['dataanalysis', 'database', 'process']
                missing_folders = [folder for folder in required_folders if not os.path.exists(os.path.join(folder_path, folder))]

                if not missing_folders:
                    st.write("All required folders already exist.")
                else:
                    for folder in missing_folders:
                        os.makedirs(os.path.join(folder_path, folder))
                    st.success(f"Created missing folders: {', '.join(missing_folders)}")

                # List files and folders in the selected folder as an example
                items = os.listdir(folder_path)
                st.write("Contents of the selected folder:")
                st.write(items)

                return folder_path

            else:
                st.error("No folder selected")
        else:
            st.error("Error selecting folder")


if __name__ == "__main__":
    main()

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.