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

GUI Python Discussion :

Mettre à jour une barre de progression d'upload


Sujet :

GUI Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien audiovisuel
    Inscrit en
    Juillet 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien audiovisuel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2023
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Mettre à jour une barre de progression d'upload
    Bonjour j'essaie depuis plusieurs jours de faire fonctionner une barre de progression pour suivre l'upload de fichiers sur un bucket S3 mais à chaque tentative que je fait python plante et je suis obligé d'aller dans le gestionnaire des tâches pour régler le soucis. Je me suis tourné vers les threads mais je suis un novice sur ce thème.
    Merci d'avance pour le retour.

    Ci-joint mon code.

    from tkinter import *
    from tkinter import ttk
    from tkinter import filedialog
    import sys
    import os
    import boto3
    import threading

    root = Tk()
    root.geometry("1000x400")

    dict_value = {'chemin': 'filename'}



    def update (valeur):
    label_percent.insert(END, valeur)

    def choix_file():
    chemin = filedialog.askopenfilename(initialdir='C:/Users/caudo/Videos/', title="Select File",
    filetypes=[("All files", "*")], typevariable=StringVar)
    labels_chf.configure(text=f'Fichier a traiter : {chemin}')
    dict_value['chemin'] = (chemin)


    def upload():
    def update_progress(percentage):
    my_progress['value'] = percentage

    s3 = boto3.client(
    service_name='s3',
    aws_access_key_id='AKIAYZGTB4U45F25VHP3',
    aws_secret_access_key='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',
    )

    class ProgressPercentage(object):

    def __init__(self, filename):
    self._filename = filename
    self._size = float(os.path.getsize(filename))
    self._seen_so_far = 0
    self._lock = threading.Lock()

    def __call__(self, bytes_amount):
    # To simplify, assume this is hooked up to a single filename
    with self._lock:
    self._seen_so_far += bytes_amount
    percentage = (self._seen_so_far / self._size) * 100
    #sys.stdout.write(
    # "\r%s %s / %s (%.2f%%)" % (
    # self._filename, self._seen_so_far, self._size,
    # percentage))
    #sys.stdout.flush()
    thread2 = threading.Thread(target=update, args=(percentage))
    thread2.start()
    thread2.join()


    new_filename = chemin = os.path.basename(dict_value['chemin'])
    s3.upload_file(
    dict_value['chemin'], 'testbein', f'video/{new_filename}',
    Callback=ProgressPercentage(dict_value['chemin'])
    )

    # Thread



    # Boutton
    b_file = ttk.Button(root, text="Choose file", command=choix_file)
    b_file.place(x=450, y=10)

    b_upload = ttk.Button(root, text="Upload file", command=upload)
    b_upload.place(x=450, y=200)

    # Label
    labels_chf = Label(root, bd=3, text='Fichier a traiter : ', font='Arial 12 bold') # -> Texte + Police
    labels_chf.place(x=200, y=50) # -> Position label

    label_percent = Text(root, width=30, height=3, background='red')
    label_percent.place(x=200, y=190)

    my_progress = ttk.Progressbar(root, orient=HORIZONTAL, length=300, mode="determinate")
    my_progress.place(x=330, y=150)

    root.mainloop()

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    C'est de la programmation tkinter un peu avancée.
    Techniquement on peut écrire quelque chose comme:
    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
    import tkinter as tk
    import tkinter.ttk as ttk
    import time
     
    from threading import  Thread
     
    def update(callback):
        value = 0
        while value < 100:
              callback(value)
              value += 10
              time.sleep(0.1)
     
    def do_start():
        def do_it(root, variable):
            def inner(value):
                root.after_idle(variable.set, value)
            return inner
     
        z = Thread(target=update, args=(do_it(root, pb_var),))
        z.daemon=True
        z.start()
     
     
    root = tk.Tk()
     
    tk.Button(root, text='start', command=do_start).pack()
    pb_var = tk.IntVar(value=0)
    pb = ttk.Progressbar(root, orient='horizontal', length=300, 
                        mode="determinate",
                        variable=pb_var)
    pb.pack()
    tk.mainloop()
    Après il faut comprendre les ingrédients de cette mécanique pour l'adapter à ses besoins.
    note: c'est l'instruction z.daemon = True qui fait qu'en cas de plantage, le thread sort sans avoir à tuer le process.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien audiovisuel
    Inscrit en
    Juillet 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien audiovisuel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2023
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse j'essaie ça au plus vite

  4. #4
    Candidat au Club
    Homme Profil pro
    Technicien audiovisuel
    Inscrit en
    Juillet 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien audiovisuel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2023
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bonjour j'ai mis à jour mon code avec le tien mais j'ai une erreur et je ne vois pas d'où elle peut venir.

    Exception in thread Thread-1 (update):
    Traceback (most recent call last):
    File "C:\Users\caudo\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1016, in _bootstrap_inner
    self.run()
    File "C:\Users\caudo\AppData\Local\Programs\Python\Python310\lib\threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
    File "C:\Users\caudo\OneDrive\Documents\IXI\Projet_IXI\FTP_UPLOAD\code\test_progressbar2.py", line 20, in update
    callback(value)
    TypeError: 'NoneType' object is not callable
    Exception in thread Thread-2 (update):
    Traceback (most recent call last):
    File "C:\Users\caudo\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1016, in _bootstrap_inner
    self.run()
    File "C:\Users\caudo\AppData\Local\Programs\Python\Python310\lib\threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
    File "C:\Users\caudo\OneDrive\Documents\IXI\Projet_IXI\FTP_UPLOAD\code\test_progressbar2.py", line 20, in update
    callback(value)
    TypeError: 'NoneType' object is not callable








    from tkinter import *
    from tkinter import ttk
    from tkinter import filedialog
    import os
    import boto3
    import threading
    from threading import Thread
    import time

    root = Tk()
    root.geometry("1000x400")

    dict_value = {'chemin': 'filename','percentage': 0}

    pb_var = IntVar(value=0)

    def update(callback,avancement):
    value = 0
    while value < 100:
    callback(value)
    value += avancement
    time.sleep(0.1)



    def choix_file():
    chemin = filedialog.askopenfilename(initialdir='C:/Users/caudo/Videos/', title="Select File",
    filetypes=[("All files", "*")], typevariable=StringVar)
    labels_chf.configure(text=f'Fichier a traiter : {chemin}')
    dict_value['chemin'] = (chemin)


    def upload():
    def update_progress(percentage):
    my_progress['value'] = percentage

    s3 = boto3.client(
    service_name='s3',
    aws_access_key_id='AKIAYZGTB4U45F25VHP3',
    aws_secret_access_key='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',
    )

    class ProgressPercentage(object):

    def __init__(self, filename):
    self._filename = filename
    self._size = float(os.path.getsize(filename))
    self._seen_so_far = 0
    self._lock = threading.Lock()

    def __call__(self, bytes_amount):
    # To simplify, assume this is hooked up to a single filename
    with self._lock:
    self._seen_so_far += bytes_amount
    percentage = (self._seen_so_far / self._size) * 100
    dict_value['percentage']= (percentage)
    #sys.stdout.write(
    # "\r%s %s / %s (%.2f%%)" % (
    # self._filename, self._seen_so_far, self._size,
    # percentage))
    #sys.stdout.flush()

    def do_start():
    def do_it(root, variable,avancement):
    def inner(value):
    root.after_idle(variable.set, value+avancement)
    return inner

    z = Thread(target=update, args=(do_it(root, pb_var,dict_value['percentage']), dict_value['percentage']))
    z.daemon=True
    z.start()

    do_start()


    new_filename = chemin = os.path.basename(dict_value['chemin'])
    s3.upload_file(
    dict_value['chemin'], 'testbein', f'video/{new_filename}',
    Callback=ProgressPercentage(dict_value['chemin'])
    )

    # Thread



    # Boutton
    b_file = ttk.Button(root, text="Choose file", command=choix_file)
    b_file.place(x=450, y=10)

    b_upload = ttk.Button(root, text="Upload file", command=upload)
    b_upload.place(x=450, y=200)

    # Label
    labels_chf = Label(root, bd=3, text='Fichier a traiter : ', font='Arial 12 bold') # -> Texte + Police
    labels_chf.place(x=200, y=50) # -> Position label

    label_percent = Text(root, width=30, height=3, background='red')
    label_percent.place(x=200, y=190)

    my_progress = ttk.Progressbar(root, orient=HORIZONTAL, length=300, mode="determinate")
    my_progress.place(x=330, y=150)

    root.mainloop()

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Si callback est None, c'est que do_it n'a pas retourné inner. Ce qui peut être du à l'indentation mais pas facile à déterminer vu que vous n'avez pas posté le code dans les balises adhoc pour puisse les voir.

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

  6. #6
    Candidat au Club
    Homme Profil pro
    Technicien audiovisuel
    Inscrit en
    Juillet 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien audiovisuel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2023
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Heu je ne sais ce que sont les balises adhoc ...

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par elbobito Voir le message
    Heu je ne sais ce que sont les balises adhoc ...
    C'est la balise CODE qui est aussi générée automatiquement en cliquant sur le # en mode édition du message.
    note: il faut lire aussi le mode d'emploi de ces forums pour les utiliser "proprement"... (et pas attendre que les modérateurs prennent le temps de remettre en forme vos messages...).

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

  8. #8
    Candidat au Club
    Homme Profil pro
    Technicien audiovisuel
    Inscrit en
    Juillet 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien audiovisuel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2023
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Oui je vais regarder ça plus en détails excusez moi.

    Est-ce mieux ?

    from tkinter import *
    from tkinter import ttk
    from tkinter import filedialog
    import os
    import boto3
    import threading
    from threading import Thread
    import time

    root = Tk()
    root.geometry("1000x400")

    dict_value = {'chemin': 'filename','percentage': 0}

    pb_var = IntVar(value=0)

    def update(callback,avancement):
    value = 0
    while value < 100:
    callback(value)
    value += avancement
    time.sleep(0.1)



    def choix_file():
    chemin = filedialog.askopenfilename(initialdir='C:/Users/caudo/Videos/', title="Select File",
    filetypes=[("All files", "*")], typevariable=StringVar)
    labels_chf.configure(text=f'Fichier a traiter : {chemin}')
    dict_value['chemin'] = (chemin)


    def upload():
    def update_progress(percentage):
    my_progress['value'] = percentage

    s3 = boto3.client(
    service_name='s3',
    aws_access_key_id='AKIAYZGTB4U45F25VHP3',
    aws_secret_access_key='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',
    )

    class ProgressPercentage(object):

    def __init__(self, filename):
    self._filename = filename
    self._size = float(os.path.getsize(filename))
    self._seen_so_far = 0
    self._lock = threading.Lock()

    def __call__(self, bytes_amount):
    # To simplify, assume this is hooked up to a single filename
    with self._lock:
    self._seen_so_far += bytes_amount
    percentage = (self._seen_so_far / self._size) * 100
    dict_value['percentage']= (percentage)
    #sys.stdout.write(
    # "\r%s %s / %s (%.2f%%)" % (
    # self._filename, self._seen_so_far, self._size,
    # percentage))
    #sys.stdout.flush()

    def do_start():
    def do_it(root, variable,avancement):
    def inner(value):
    root.after_idle(variable.set, value+avancement)
    return inner

    z = Thread(target=update, args=(do_it(root, pb_var,dict_value['percentage']), dict_value['percentage']))
    z.daemon=True
    z.start()

    do_start()


    new_filename = chemin = os.path.basename(dict_value['chemin'])
    s3.upload_file(
    dict_value['chemin'], 'testbein', f'video/{new_filename}',
    Callback=ProgressPercentage(dict_value['chemin'])
    )

    # Thread



    # Boutton
    b_file = ttk.Button(root, text="Choose file", command=choix_file)
    b_file.place(x=450, y=10)

    b_upload = ttk.Button(root, text="Upload file", command=upload)
    b_upload.place(x=450, y=200)

    # Label
    labels_chf = Label(root, bd=3, text='Fichier a traiter : ', font='Arial 12 bold') # -> Texte + Police
    labels_chf.place(x=200, y=50) # -> Position label

    label_percent = Text(root, width=30, height=3, background='red')
    label_percent.place(x=200, y=190)

    my_progress = ttk.Progressbar(root, orient=HORIZONTAL, length=300, mode="determinate")
    my_progress.place(x=330, y=150)

    root.mainloop()

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par elbobito Voir le message
    Est-ce mieux ?
    Normalement, en regardant le message, vous devriez voir qu'on n'y voit pas les indentations.
    Vous avez la possibilité de visualiser la mise en forme avant de le poster et de le corriger.

    Ici, vous avez ajouté des balises CODE sans mettre le texte du code à l'intérieur...

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

  10. #10
    Candidat au Club
    Homme Profil pro
    Technicien audiovisuel
    Inscrit en
    Juillet 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien audiovisuel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2023
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Pardon je n'avais pas compris je croyais qu'il faillait mettre une fois au début et une fois à la fin du code...

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
     
    from tkinter import *
    from tkinter import ttk
    from tkinter import filedialog
    import os
    import boto3 
    import threading
    from threading import  Thread
    import time
     
    root = Tk()
    root.geometry("1000x400")
     
    dict_value = {'chemin': 'filename','percentage': 0}
     
    pb_var = IntVar(value=0)
     
    def update(callback,avancement):
        value = 0
        while value < 100:
            callback(value)
            value += avancement
            time.sleep(0.1)
     
     
     
    def choix_file():
        chemin = filedialog.askopenfilename(initialdir='C:/Users/caudo/Videos/', title="Select File",
                                            filetypes=[("All files", "*")], typevariable=StringVar)
        labels_chf.configure(text=f'Fichier a traiter : {chemin}')
        dict_value['chemin'] = (chemin)
     
     
    def upload():
        def update_progress(percentage):
            my_progress['value'] = percentage
     
        s3 = boto3.client(
            service_name='s3',
            aws_access_key_id='AKIAYZGTB4U45F25VHP3',
            aws_secret_access_key='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',
        )
     
        class ProgressPercentage(object):
     
            def __init__(self, filename):
                self._filename = filename
                self._size = float(os.path.getsize(filename))
                self._seen_so_far = 0
                self._lock = threading.Lock()
     
            def __call__(self, bytes_amount):
                # To simplify, assume this is hooked up to a single filename
                with self._lock:
                    self._seen_so_far += bytes_amount
                    percentage = (self._seen_so_far / self._size) * 100
                    dict_value['percentage']= (percentage)
                    #sys.stdout.write(
                    #    "\r%s  %s / %s  (%.2f%%)" % (
                    #        self._filename, self._seen_so_far, self._size,
                    #        percentage))
                    #sys.stdout.flush()
     
            def do_start():
                def do_it(root, variable,avancement):
                    def inner(value):
                        root.after_idle(variable.set, value+avancement)
                        return inner
     
                z = Thread(target=update, args=(do_it(root, pb_var,dict_value['percentage']), dict_value['percentage']))
                z.daemon=True
                z.start()
     
            do_start()
     
     
        new_filename = chemin = os.path.basename(dict_value['chemin'])
        s3.upload_file(
            dict_value['chemin'], 'testbein', f'video/{new_filename}',
            Callback=ProgressPercentage(dict_value['chemin'])
        )
     
    # Thread 
     
     
     
    # Boutton
    b_file = ttk.Button(root, text="Choose file", command=choix_file)
    b_file.place(x=450, y=10)
     
    b_upload = ttk.Button(root, text="Upload file", command=upload)
    b_upload.place(x=450, y=200)
     
    # Label
    labels_chf = Label(root, bd=3, text='Fichier a traiter : ', font='Arial 12 bold')  # -> Texte + Police
    labels_chf.place(x=200, y=50)  # -> Position label
     
    label_percent = Text(root, width=30, height=3, background='red')
    label_percent.place(x=200, y=190)
     
    my_progress = ttk.Progressbar(root, orient=HORIZONTAL, length=300, mode="determinate")
    my_progress.place(x=330, y=150)
     
    root.mainloop()

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Ben ligne 69, le return inner est fait par/dans le bloc de la fonction inner. Du coup, do_it ne retourne rien. Comparez avec le code que j'ai posté: il y a bien un pb. d'indentation.

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

  12. #12
    Candidat au Club
    Homme Profil pro
    Technicien audiovisuel
    Inscrit en
    Juillet 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien audiovisuel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2023
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai effectué la modification, le problème c'est qu'une fois que j'appuie sur le bouton upload le programme plante je suis obligé de l'arrêter avec le gestionnaire de tâches et je n'ai pas de messages d'erreurs à la fin.

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par elbobito Voir le message
    J'ai effectué la modification, le problème c'est qu'une fois que j'appuie sur le bouton upload le programme plante je suis obligé de l'arrêter avec le gestionnaire de tâches et je n'ai pas de messages d'erreurs à la fin.
    Votre code est trop mal foutu pour que je comprenne ce qu'il se passe sans y passer trop de temps... ou le corriger pour le rendre plus lisible. Peut être que d'autres auront des idées.

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

  14. #14
    Candidat au Club
    Homme Profil pro
    Technicien audiovisuel
    Inscrit en
    Juillet 2023
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien audiovisuel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2023
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Merci du temps que vous m'avez accordé par contre il faudrait revoir votre sens de la politesse.

    La bonne journée

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par elbobito Voir le message
    Merci du temps que vous m'avez accordé par contre il faudrait revoir votre sens de la politesse.
    Comme la politesse de lire et appliquer les règles qui régissent ces forums avant de demander de l'aide?

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

Discussions similaires

  1. [Qt Designer] Mettre une barre de progression dans une QTableWidget
    Par bombseb dans le forum Outils
    Réponses: 0
    Dernier message: 16/11/2018, 16h33
  2. [PHP 7] Upload avec une barre de progression
    Par Fredy007 dans le forum Langage
    Réponses: 6
    Dernier message: 03/01/2017, 15h55
  3. Réponses: 7
    Dernier message: 20/05/2016, 18h45
  4. Afficher une barre de progression en upload
    Par illuzmax dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/06/2006, 13h32
  5. Indy FTP (idFTP) faire une barre de progress de transfert
    Par Harry dans le forum Web & réseau
    Réponses: 4
    Dernier message: 09/07/2004, 13h15

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