Dynamic text and dropdown value in taipy

143 views Asked by At

i am using the below folder structure for my project folder structure for pages

in overview.md i have a text where its mentioned "total number of projects:" similarly i have a create project and a dropdown selectorthat list all avaiable projects in create.md, now the problem is when ever i am creating a project the dropdown values are not updating and also in the overview_md "total number of projects:" stays the same.

home.py

from taipy.gui import Gui
import taipy as tp


from user_interface.taipy.pages.create.create import create_md
from user_interface.taipy.pages.overview.overview import overview_md
from user_interface.taipy.pages.upload.upload import upload_md
from user_interface.taipy.pages.root import root



pages = {
    '/':root,
    "Overview":overview_md,
    "create":create_md,
    "Upload":upload_md,

}

gui_multi_pages = Gui(pages=pages)

if __name__ == '__main__':
    tp.Core().run()
    
    gui_multi_pages.run(title="Dataforge",dark_mode=False)

overview.md

## Quick overview 

Total projects  : <|{total_projects}|>

overview.py

def get_no_collections():
    error,collections = shepard_client.get_all_collections()
    print("checked total_projects")
    if collections is not None:
        for collection in collections:
            #print(f"ID: {collection.id}, Name: {collection.name}")
            collections_list.append((collection.id, collection.name))
        return len(collections_list)
    else:
        print("Failed to fetch collections.")
        return "Error getting collections"
    
total_projects= get_no_collections()
create.md
`<|{selected_projects}|selector|lov={available_projects}|type=Collection|adapter={lambda c: (str(c.id), c.name)}|label=Select Project|on_change=update_plist|dropdown|>

create.py

class Collection:
    def __init__(self, id, name):
        self.id = id
        self.name = name
error,collection = shepard_client.get_all_collections()
available_projects = [Collection(data.id, data.name) for data in collection]

how can i change the variable value every time i switch pages or refresh page elements so that its updated?

i tried updating using state. when there is create button clicked but doesnt really update the dropdown list.

def update_plist(state) -> None:
    """
    Function to update the list of available projects.
    """
    try:
        error, u_collections = shepard_client.get_all_collections()
        if not error:
            # Update the state with the new list of collections
            state.available_projects = [Collection(data['id'], data['name']) for data in u_collections]
        else:
            print("Error fetching collections:", error)
    except Exception as e:
        print("Exception in update_plist:", e)

0

There are 0 answers