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()
Partager