Je commence à apprendre Python, et j'ai pensé à créer un convertisseur d'un fichier à un autre (par exemple, de png à avi ou entre autres extensions de fichier) sous Windows OS pour l'instant.
J'ai écrit un script qui fonctionne bien et complète le processus de conversion, mais je veux l'améliorer en fonctionnalité (et ensuite en graphisme); J'utilise Tkinter et j'ai pensé à charger les fichiers avec la possibilité de les faire glisser-déposer comme entrée pour la prochaine commande de conversion, au lieu d'ouvrir un dossier dans lequel mettre les fichiers comme "source d'entrée". J'ai trouvé ce sujet (drag and drop explorer files to tkinter entry widget python) et je l'ai utilisé de cette façon:
import sys
import os
import Tkinter
from tkdnd_wrapper import TkDND
import shlex, subprocess
from subprocess import Popen, PIPE
import glob
import shutil
root = Tkinter.Tk()
dnd = TkDND(root)
entry = Tkinter.Entry()
entry.grid()
def handle(event):
inputfilespath = event.data
event.widget.insert(0, inputfilespath)
filesdir = os.path.dirname(os.path.realpath(inputfilespath))
files = glob.iglob(os.path.join(filesdir, "*.myext"))
for inputfilespath in files:
if os.path.isfile(inputfilespath):
subprocess1 = subprocess.Popen([...commande de conversion donnée sous forme de liste, pas de chaîne...], shell=True)
print "\n\nConversion en cours..."
subprocess1.wait()
subprocess1.terminate()
print "\n\nProcessus terminé!"
dnd.bindtarget(entry, handle, 'text/uri-list')
root.mainloop()
Les problèmes:
-
Si le nom du fichier contient un espace, il n'y a pas de conversion, et le processus se termine sans même notifier d'erreur. "inputfilespath" veut être le nom générique pour tous les fichiers d'entrée que j'ai sélectionnés, et (pour ce que j'ai lu) je ne peux pas (?) utiliser des guillemets pour une variable d'environnement espérant inclure les espaces blancs dans le nom de fichier...
-
J'ai essayé de copier différents fichiers (avec la même extension de fichier et sans espace dans le nom de fichier) dans le même dossier, et si je fais glisser-déposer seulement un d'entre eux sur le widget Entry, le processus démarre bien (et c'est super!), mais il continue également pour tous les autres fichiers non-sélectionnés avec la même extension dans le même dossier, alors que si je fais glisser-déposer plusieurs fichiers sur le widget Entry, aucune conversion ne se produit....