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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2024
    Messages
    5
    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 : 5
    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 640
    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 640
    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
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2024
    Messages
    5
    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 : 5
    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 640
    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 640
    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
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2024
    Messages
    5
    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 : 5
    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 640
    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 640
    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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2024
    Messages
    5
    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 : 5
    Par défaut
    Bonjour et merci pour votre retour, je suis novice sur la plateforme donc j'apprends au fur et à mesure. Voici une version complète mais simplifié du code ou se situe le problème. Tout se passe dans la fonction chatlaunch(). En effet malgré l'implémentation de 2 fonction updateidletask() le script attends toujours la réponse de l'API pour mettre à jour l'interface graphique.
    Ce à quoi j'essaye de parvenir c'est d'obtenir le résultat de la fonction widgets_place() sur l'interface graphique malgré que l'API n'est pas encore répondu à l'input.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    from customtkinter import *
    from mistralai import Mistral
    import os
     
    app = CTk()
    app.geometry("1250x975")
    app.title("COGEPARC IA")
     
    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")
    tab_view.add("JURIDIQUE")
     
    extracted_content = ""
     
    def widgets_place():
        Chatframe.place_forget()
        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")
     
    def chatlaunch():
        try:
            widgets_place()
     
            output_frame.update_idletasks()
            output_txtbox.update_idletasks()
     
            prompt_chat = f"{Chat_input.get()}"
     
            chat_response_tab1 = client.chat.complete(
                model="mistral-large-latest",
                temperature=0.3,
                messages=[
                    {"role": "system", "content": ""},
                    {"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 Exception as e:
            output_txtbox.insert("end", "Erreur lors du traitement de votre requête: " + str(e) + "\n")
     
    Chatframe = CTkFrame(master=tab_view.tab("LE CHAT COGEPARC"), width=900, height=140, fg_color="#FFFFFF", corner_radius=15, bg_color="#002676", border_width=0.5)
    Chatframe.place(relx=0.5, rely=0.47, anchor="center")
     
    output_frame = CTkFrame(master=tab_view.tab("LE CHAT COGEPARC"), width=900, height=700, corner_radius=15, bg_color="#002676", fg_color="#FFFFFF")
     
     
    output_txtbox = CTkTextbox(master=output_frame, width=850, height=650, font=("Montserrat", 16), fg_color="#FFFFFF", wrap="word", text_color="#000000")
    output_txtbox.place(relx=0.5, rely=0.5, anchor="center")
     
    Chat_input = CTkEntry(master=Chatframe, placeholder_text="Demander au Chat ...", placeholder_text_color="#808080", text_color="#000000", width=825, height=50, fg_color="#FFFFFF", font=("Montserrat", 18), border_width=0)
    Chat_input.place(relx=0.5, rely=0.3, anchor="center")
     
    button_arrow = CTkButton(master=Chatframe, text="", width=30, height=30, fg_color="#BFBFBF", hover_color="#DCDCDC", border_width=1.25, corner_radius=5, command=chatlaunch)
    button_arrow.place(relx=0.95, rely=0.30, anchor="center")
     
    app.mainloop()

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 640
    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 640
    Par défaut
    Salut,

    Techniquement, il faut quelque chose de plus fort (.update() au lieu d'un simple .update_idletasks()). Probablement du aux opérations effectuées dans widgets_place(), mais il y a des précautions d'emploi.

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

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2024
    Messages
    5
    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 : 5
    Par défaut
    Alors j'ai essayé avec la fonction update placée à la suite des actions sur les widgets dans la fonction widgets_place(). Maintenant il y a un temps d'attente puis la fonction widget_place n'est pas pas traité dans l'interface graphique. Je vais me renseigné sur les threads et les dialogues et je vous ferais part des résultats. A titre informatif voici le code avec update().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    from customtkinter import *
    from mistralai import Mistral
    import os
     
    app = CTk()
    app.geometry("1250x975")
    app.title("COGEPARC IA")
     
    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")
    tab_view.add("JURIDIQUE")
     
    extracted_content = ""
     
    def widgets_place():
        Chatframe.place_forget()
        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")
        Chatframe.update()
        output_frame.update()
     
    def chatlaunch():
        try:
            prompt_chat = f"{Chat_input.get()}"
     
            chat_response_tab1 = client.chat.complete(
                model="mistral-large-latest",
                temperature=0.3,
                messages=[
                    {"role": "system", "content": ""},
                    {"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 Exception as e:
            output_txtbox.insert("end", "Erreur lors du traitement de votre requête: " + str(e) + "\n")
     
    Chatframe = CTkFrame(master=tab_view.tab("LE CHAT COGEPARC"), width=900, height=140, fg_color="#FFFFFF", corner_radius=15, bg_color="#002676", border_width=0.5)
    Chatframe.place(relx=0.5, rely=0.47, anchor="center")
     
    output_frame = CTkFrame(master=tab_view.tab("LE CHAT COGEPARC"), width=900, height=700, corner_radius=15, bg_color="#002676", fg_color="#FFFFFF")
     
     
    output_txtbox = CTkTextbox(master=output_frame, width=850, height=650, font=("Montserrat", 16), fg_color="#FFFFFF", wrap="word", text_color="#000000")
    output_txtbox.place(relx=0.5, rely=0.5, anchor="center")
     
    Chat_input = CTkEntry(master=Chatframe, placeholder_text="Demander au Chat ...", placeholder_text_color="#808080", text_color="#000000", width=825, height=50, fg_color="#FFFFFF", font=("Montserrat", 18), border_width=0)
    Chat_input.place(relx=0.5, rely=0.3, anchor="center")
     
    button_arrow = CTkButton(master=Chatframe, text="", width=30, height=30, fg_color="#BFBFBF", hover_color="#DCDCDC", border_width=1.25, corner_radius=5, command=chatlaunch)
    button_arrow.place(relx=0.95, rely=0.30, anchor="center")
     
    app.mainloop()

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 640
    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 640
    Par défaut
    Reprenez mon exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import tkinter as tk
    import time
     
    root = tk.Tk()
    label = tk.Label(root, text='****')
    label.pack()
     
    def do_update():
        label['text'] = 'start'
        root.update_idletasks()
        time.sleep(0.5) # simule l'opération/appel qui prend du temps.
        label['text'] = 'done'
     
    tk.Button(root, text='go', command=do_update).pack()
    tk.mainloop()
    La fonction do_update bloque l'interface graphique pendant 0.5 s. C'est peut être pas très gênant (surtout dans cet exemple) mais cette fonction est supposée se terminer le plus rapidement possible sinon on va afficher un sablier ou une barre de progression qui pour être mis à jour devront pousser l'activité qui prend un certain temps dans un thread séparé.
    Du coup, la fonction (appelée callback ou fonction de rappel car appelée par tkinter...) se termine et les mises à jour peuvent s'effectuer.
    De son côté l'activité qui a été pris en charge via un thread devra enclencher des mises à jour de l'interface (en fonction des résultats).
    Pour que ces mises à jour passent de ce thread au thread principal, il va falloir passer par une queue.Queue et côté GUI un polling qui va vider cette Queue.

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

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