IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Mise à jour de l'interface lors de l'execution d'une fonction


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2024
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2024
    Messages : 6
    Par défaut Mise à jour de l'interface lors de l'execution d'une fonction
    Dans le cadre de la création d'une interface lié avec un modèle d'IA via API, je rencontre des difficulté pour la mise à jour de l'interface. Lorsque je lance la fonction jointe l'interface va ses mettre à jour uniquement lorsque le script aura reçus la réponse via l'API. Je cherche un moyen que l'interface se mettent à jour avant afin de notifier l'utilisateur que sa requête est en cours d'exécution. Si quelqu'un a une solution pour ce problème.
    Voici la fonction jointe

    def chatlaunch():
    if newchat_button.winfo_viewable():
    try:
    img_label.place_forget()
    Chatframe.place_forget()
    img_logo.configure(size=(100,100))
    img_label.configure(width=100,height=100)
    img_label.place(relx=0.06,rely=0.06,anchor="center")
    copy_button.place(relx=0.84,rely=0.015,anchor="center")
    newchat_button.place(relx=0.75,rely=0.015,anchor="center")
    Chatframe.place(relx=0.5,rely=0.9, anchor="center")
    output_frame.place(relx=0.5,rely=0.42,anchor="center")

    output_txtbox.insert("end","Vous : " + (Chat_input.get()) + "\n" + "\n")


    # Calculer la condition avant de l'inclure dans la f-string
    file_content = "" if importedfile.get("1.0", "end-1c") == "" else extracted_content

    prompt_chat = f"""
    Voici l'historique de notre intéraction : {output_txtbox.get("1.0", "end-1c")}
    ###
    {Chat_input.get()}
    ###
    {file_content}
    """
    chat_response_tab1 = client.chat.complete(
    model=model,
    temperature=f"0.{int(select_temperature_slider.get())}",
    messages=[
    {"role": "system", "content": select_master_txtbox.get("1.0", "end-1c")},
    {"role": "user", "content": prompt_chat},
    ]
    )

    reponse_content = chat_response_tab1.choices[0].message.content

    output_txtbox.insert("end",reponse_content + "\n" + "\n")
    Chat_input.delete(0, "end")
    except:
    output_txtbox.insert("end","Erreur lors du Traitement de votre requette" + "\n")
    else:

    try:
    img_label.place_forget()
    Chatframe.place_forget()
    img_logo.configure(size=(100,100))
    img_label.configure(width=100,height=100)
    img_label.place(relx=0.06,rely=0.06,anchor="center")
    copy_button.place(relx=0.84,rely=0.015,anchor="center")
    newchat_button.place(relx=0.75,rely=0.015,anchor="center")
    Chatframe.place(relx=0.5,rely=0.9, anchor="center")
    output_frame.place(relx=0.5,rely=0.42,anchor="center")

    output_txtbox.insert("end","Vous : " + (Chat_input.get()) + "\n" + "\n")

    # Calculer la condition avant de l'inclure dans la f-string
    file_content = "" if importedfile.get("1.0", "end-1c") == "" else extracted_content

    prompt_chat = f"""
    {Chat_input.get()}
    ###
    {file_content}
    """

    chat_response_tab1 = client.chat.complete(
    model=model,
    temperature=f"0.{int(select_temperature_slider.get())}",
    messages=[
    {"role": "system", "content": select_master_txtbox.get("1.0", "end-1c")},
    {"role": "user", "content": prompt_chat},
    ]
    )

    reponse_content = chat_response_tab1.choices[0].message.content
    historique = reponse_content

    output_txtbox.insert("end",reponse_content + "\n" + "\n")
    Chat_input.delete(0, "end")
    except:
    output_txtbox.insert("end","Erreur lors du Traitement de votre requette" + "\n")
    print(importedfile.get("1.0", "end-1c"))

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 756
    Par défaut
    Salut,

    Citation Envoyé par epernelle Voir le message
    Lorsque je lance la fonction jointe l'interface va ses mettre à jour uniquement lorsque le script aura reçus la réponse via l'API. Je cherche un moyen que l'interface se mettent à jour avant afin de notifier l'utilisateur que sa requête est en cours d'exécution.
    L'interface sera bloquée tant que l'API n'aura pas répondu et ne sera mise à jour que lorsque la fonction aura rendu la main à la mainloop.
    update_idletasks ou dialoguer avec des threads sont des solutions à ce genre de cas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2024
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2024
    Messages : 6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    L'interface sera bloquée tant que l'API n'aura pas répondu et ne sera mise à jour que lorsque la fonction aura rendu la main à la mainloop.
    update_idletasks ou dialoguer avec des threads sont des solutions à ce genre de cas.

    - W
    Comment fonctionne les threads et les dialogue ? j'ai déjà tester l'option update_idletasks sans succès. Ou peut être ai-je mal codé cette partie

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 756
    Par défaut
    Ce ne sont pas les exemples (et les tutos) qui manquent! Si vous ne montrez pas ce que vous avez essayé, on ne saura pas ce qui pêche.
    Mais vite fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import tkinter as tk
     
    root = tk.Tk()
    label = tk.Label(root, text='****')
    label.pack()
     
    def do_update():
        label['text'] = 'start'
        label.update_idletasks()
        label.after(1000)  # simule l'opération/appel qui prend du temps.
        label['text'] = 'done'
     
    tk.Button(root, text='go', command=do_update).pack()
    tk.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2024
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2024
    Messages : 6
    Par défaut
    Voici l'extrait du code, la partie qui pose pb se trouve dans la fonction chatlaunch():, a noter que je n'ai pas optimisé la partie qui réagence les widgets que j'aurais pu mettre dans une fonction. Dans l'exemple la fonction update idletask() ne permet pas de mettre à jour l'interface avant la réponse de l'API.
    app = CTk()
    app.geometry("1250x975")
    app.title("COGEPARC IA")
    app.iconbitmap(r"/Users/etiennepernelle/Documents/Python/COGEPARC-IA-_2_.ico")

    client = Mistral(api_key="")

    tab_view = CTkTabview(master=app, corner_radius=15, anchor="w", fg_color="#002676",height=1000,segmented_button_selected_color=("#002676"),segmented_button_selected_hover_color=("#002676"))
    tab_view.pack(fill="both",padx=1,pady=1)

    tab_view.add("LE CHAT COGEPARC")

    extracted_content = ""

    img_logo = CTkImage(light_image=Image.open(r"/Users/etiennepernelle/Documents/Python/COGEPARC_IA__4_-removebg-preview-_1_.ico"),size=(200,200))

    img_label = CTkLabel(master=tab_view.tab("LE CHAT COGEPARC"),image=img_logo,width=200,height=200,text="")
    img_label.place(relx=0.5,rely=0.17,anchor="center")

    combo_box_mapping = {
    "Mistral Large": "mistral-large-latest",
    "Codestral": "codestral-latest",
    "Pixtral Large": "pixtral-large-latest"
    }


    def get_result(selection):
    return combo_box_mapping.get(selection)


    def chatlaunch():
    if newchat_button.winfo_viewable():
    try:
    img_label.place_forget()
    Chatframe.place_forget()
    img_logo.configure(size=(100,100))
    img_label.configure(width=100,height=100)
    img_label.place(relx=0.06,rely=0.06,anchor="center")
    copy_button.place(relx=0.84,rely=0.015,anchor="center")
    newchat_button.place(relx=0.75,rely=0.015,anchor="center")
    Chatframe.place(relx=0.5,rely=0.9, anchor="center")
    output_frame.place(relx=0.5,rely=0.42,anchor="center")

    output_txtbox.insert("end","Vous : " + (Chat_input.get()) + "\n" + "\n")

    output_frame.update_idletasks()
    output_txtbox.update_idletasks()

    # Calculer la condition avant de l'inclure dans la f-string
    file_content = "" if importedfile.get("1.0", "end-1c") == "" else extracted_content

    prompt_chat = f"""
    Voici l'historique de notre intéraction : {output_txtbox.get("1.0", "end-1c")}
    ###
    {Chat_input.get()}
    ###
    {file_content}
    """
    chat_response_tab1 = client.chat.complete(
    model=model,
    temperature=f"0.{int(select_temperature_slider.get())}",
    messages=[
    {"role": "system", "content": select_master_txtbox.get("1.0", "end-1c")},
    {"role": "user", "content": prompt_chat},
    ]
    )

    reponse_content = chat_response_tab1.choices[0].message.content

    output_txtbox.insert("end",reponse_content + "\n" + "\n")
    Chat_input.delete(0, "end")
    except:
    output_txtbox.insert("end","Erreur lors du Traitement de votre requette" + "\n")
    else:

    try:
    img_label.place_forget()
    Chatframe.place_forget()
    img_logo.configure(size=(100,100))
    img_label.configure(width=100,height=100)
    img_label.place(relx=0.06,rely=0.06,anchor="center")
    copy_button.place(relx=0.84,rely=0.015,anchor="center")
    newchat_button.place(relx=0.75,rely=0.015,anchor="center")
    Chatframe.place(relx=0.5,rely=0.9, anchor="center")
    output_frame.place(relx=0.5,rely=0.42,anchor="center")

    output_txtbox.insert("end","Vous : " + (Chat_input.get()) + "\n" + "\n")

    output_frame.update_idletasks()
    output_txtbox.update_idletasks()

    # Calculer la condition avant de l'inclure dans la f-string
    file_content = "" if importedfile.get("1.0", "end-1c") == "" else extracted_content

    prompt_chat = f"""
    {Chat_input.get()}
    ###
    {file_content}
    """

    chat_response_tab1 = client.chat.complete(
    model=model,
    temperature=f"0.{int(select_temperature_slider.get())}",
    messages=[
    {"role": "system", "content": select_master_txtbox.get("1.0", "end-1c")},
    {"role": "user", "content": prompt_chat},
    ]
    )

    reponse_content = chat_response_tab1.choices[0].message.content
    historique = reponse_content

    output_txtbox.insert("end",reponse_content + "\n" + "\n")
    Chat_input.delete(0, "end")
    except:
    output_txtbox.insert("end","Erreur lors du Traitement de votre requette" + "\n")
    print(importedfile.get("1.0", "end-1c"))

    app.mainloop

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 756
    Par défaut
    Citation Envoyé par epernelle Voir le message
    Voici l'extrait du code, la partie qui pose pb se trouve dans la fonction chatlaunch():, a noter que je n'ai pas optimisé la partie qui réagence les widgets que j'aurais pu mettre dans une fonction. Dans l'exemple la fonction update idletask() ne permet pas de mettre à jour l'interface avant la réponse de l'API.
    Est ce que mon exemple fonctionne? Car vous ne proposez pas vraiment un exemple!
    Apprenez à poster votre code en utilisant la balise code (ou le # qui est dans l'éditeur de message).
    Postez un code minimal qui permette de reproduire le soucis constaté (pas juste un extrait choisi qu'on devra se contenter de lire).


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur lors de l'execution d'une fonction
    Par SpeedOverflow dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/09/2011, 16h56
  2. Postgre 8.3 : Problème lors de l'execution d'une fonction
    Par palassou dans le forum Requêtes
    Réponses: 7
    Dernier message: 22/12/2009, 14h44
  3. Fenêtre grisatre lors de l'exécution d'une fonction callback
    Par riadh8 dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 17/05/2009, 21h54
  4. [VS]Erreur lors de l'execution d'une fonction
    Par nephhh dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/06/2007, 14h12
  5. Erreur PLSQL lors de l'execution d'une fonction
    Par chicken92000 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 17/03/2006, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo