J'ai un script simple qui analyse un fichier et charge son contenu dans une base de données. Je n'ai pas besoin d'interface utilisateur, mais pour le moment, j'invite l'utilisateur à analyser le fichier en utilisant raw_input
ce qui est le plus hostile, en particulier parce que l'utilisateur ne peut pas copier / coller le chemin. Je voudrais un moyen rapide et facile de présenter une boîte de dialogue de sélection de fichier à l'utilisateur, il peut sélectionner le fichier, puis il est chargé dans la base de données. (Dans mon cas d'utilisation, s'ils choisissaient le mauvais fichier, l'analyse échouerait et ne poserait pas de problème même s'il était chargé dans la base de données.)
import tkFileDialog
file_path_string = tkFileDialog.askopenfilename()
Ce code est proche de ce que je veux, mais il laisse un cadre vide ennuyeux ouvert (qui ne peut pas être fermé, probablement parce que je n'ai pas enregistré de gestionnaire d'événements de fermeture).
Je n'ai pas besoin d'utiliser tkInter, mais comme il est dans la bibliothèque standard Python, c'est un bon candidat pour la solution la plus rapide et la plus simple.
Quel est le moyen rapide et facile de demander un fichier ou un nom de fichier dans un script sans aucune autre interface utilisateur?
la source
Réponses:
Tkinter est le moyen le plus simple si vous ne souhaitez pas avoir d'autres dépendances. Pour afficher uniquement la boîte de dialogue sans aucun autre élément de l'interface graphique, vous devez masquer la fenêtre racine en utilisant la
withdraw
méthode:Variante Python 2:
la source
tkinter.filedialog.askopenfilename()
import Tkinter as tk
andimport tkFileDialog
andfile_path = tkFileDialog.askopenfilename()
Vous pouvez utiliser easygui :
Pour l'installer
easygui
, vous pouvez utiliserpip
:C'est un seul module Python pur (
easygui.py
) qui utilisetkinter
.la source
Essayez avec wxPython :
la source
Si vous n'avez pas besoin de l'interface utilisateur ou que vous vous attendez à ce que le programme s'exécute dans une CLI, vous pouvez analyser le chemin du fichier en tant qu'argument. Cela vous permettrait d'utiliser la fonction de saisie semi-automatique de votre CLI pour trouver rapidement le fichier dont vous avez besoin.
Cela ne serait probablement pratique que si le script n'est pas interactif en plus de l'entrée du chemin de fichier.
la source
Découvrez EasyGUI, un module très facile à utiliser qui devrait faire le travail - http://easygui.sourceforge.net/
Vous utiliseriez la fonction fileopenbox détaillée sur cette page de documentation de l'API - https://easygui.readthedocs.io/en/latest/api.html
la source
pywin32
donne accès à laGetOpenFileName
fonction win32. De l' exemplela source
En utilisant tkinter (python 2) ou Tkinter (python 3), il est en effet possible d'afficher une boîte de dialogue d'ouverture de fichier (voir d'autres réponses ici). Veuillez noter cependant que l'interface utilisateur de cette boîte de dialogue est obsolète et ne correspond pas aux boîtes de dialogue d'ouverture de fichier plus récentes disponibles dans Windows 10.
De plus - si vous cherchez à intégrer le support de python dans votre propre application - vous découvrirez bientôt que la bibliothèque tkinter n'est pas du code open source et plus encore - c'est une bibliothèque commerciale.
(Par exemple, la recherche de "tarification activetcl" vous mènera à cette page Web: https://reviews.financesonline.com/p/activetcl/ )
Ainsi, la bibliothèque tkinter coûtera de l'argent pour toute application souhaitant intégrer python.
J'ai moi-même réussi à trouver la bibliothèque de pythonnet:
(Licence MIT)
En utilisant la commande suivante, il est possible d'installer pythonnet:
Et ici, vous pouvez trouver un exemple de travail pour l'utilisation de la boîte de dialogue Ouvrir un fichier:
https://stackoverflow.com/a/50446803/2338477
Permettez-moi de copier un exemple également ici:
Si vous manquez également une interface utilisateur plus complexe - voir Démo dossier dans pythonnet git.
Je ne suis pas sûr de la portabilité vers d'autres systèmes d'exploitation, je n'ai pas essayé, mais .net 5 est prévu pour être porté sur plusieurs systèmes d'exploitation (recherche "plates-formes .net 5", https://devblogs.microsoft.com/dotnet/introducing -net-5 / ) - cette technologie est donc également à l'épreuve du temps.
la source