Ich habe ein einfaches Skript, das eine Datei analysiert und ihren Inhalt in eine Datenbank lädt. Ich brauche keine Benutzeroberfläche, aber im Moment fordere ich den Benutzer auf, die Datei zu analysieren, raw_input
was am unfreundlichsten ist, insbesondere weil der Benutzer den Pfad nicht kopieren / einfügen kann. Ich möchte dem Benutzer eine schnelle und einfache Möglichkeit bieten, einen Dateiauswahldialog zu präsentieren. Er kann die Datei auswählen und sie dann in die Datenbank laden. (In meinem Anwendungsfall würde das Parsen fehlschlagen, wenn sie zufällig die falsche Datei auswählen würden, und wäre auch dann kein Problem, wenn sie in die Datenbank geladen würde.)
import tkFileDialog
file_path_string = tkFileDialog.askopenfilename()
Dieser Code entspricht in etwa dem, was ich möchte, lässt jedoch einen nervigen leeren Frame offen (der nicht geschlossen werden kann, wahrscheinlich weil ich keinen Close Event Handler registriert habe).
Ich muss tkInter nicht verwenden, aber da es sich in der Python-Standardbibliothek befindet, ist es ein guter Kandidat für die schnellste und einfachste Lösung.
Was ist eine schnelle und einfache Möglichkeit, eine Datei oder einen Dateinamen in einem Skript ohne andere Benutzeroberfläche anzufordern?
quelle
Antworten:
Tkinter ist der einfachste Weg, wenn Sie keine anderen Abhängigkeiten haben möchten. Um nur das Dialogfeld ohne andere GUI-Elemente anzuzeigen, müssen Sie das Stammfenster mit der folgenden
withdraw
Methode ausblenden :Python 2-Variante:
quelle
tkinter.filedialog.askopenfilename()
import Tkinter as tk
undimport tkFileDialog
undfile_path = tkFileDialog.askopenfilename()
Sie können easygui verwenden :
Zur Installation
easygui
können Sie Folgendes verwendenpip
:Es ist ein einzelnes reines Python-Modul (
easygui.py
), das verwendettkinter
.quelle
Versuchen Sie es mit wxPython :
quelle
Wenn Sie die Benutzeroberfläche nicht benötigen oder erwarten, dass das Programm in einer CLI ausgeführt wird, können Sie den Dateipfad als Argument analysieren. Auf diese Weise können Sie die Autovervollständigungsfunktion Ihrer CLI verwenden, um die benötigte Datei schnell zu finden.
Dies wäre wahrscheinlich nur dann nützlich, wenn das Skript neben der Dateipfadeingabe nicht interaktiv ist.
quelle
Schauen Sie sich EasyGUI an, ein sehr einfach zu verwendendes Modul, das die Arbeit erledigen sollte - http://easygui.sourceforge.net/
Sie würden die auf dieser API-Dokumentationsseite beschriebene Funktion fileopenbox verwenden - https://easygui.readthedocs.io/en/latest/api.html
quelle
pywin32
bietet Zugriff auf dieGetOpenFileName
win32-Funktion. Aus dem Beispielquelle
Mit tkinter (Python 2) oder Tkinter (Python 3) ist es tatsächlich möglich, den Dialog zum Öffnen von Dateien anzuzeigen (siehe andere Antworten hier). Beachten Sie jedoch, dass die Benutzeroberfläche dieses Dialogfelds veraltet ist und nicht den neueren Dialogfeldern zum Öffnen von Dateien entspricht, die in Windows 10 verfügbar sind.
Wenn Sie auf dem Weg sind, die Python-Unterstützung in Ihre eigene Anwendung einzubetten, werden Sie bald feststellen, dass es sich bei der tkinter-Bibliothek nicht um Open Source-Code handelt, sondern um eine kommerzielle Bibliothek.
(Wenn Sie beispielsweise nach "activetcl price" suchen, gelangen Sie zu dieser Webseite: https://reviews.financesonline.com/p/activetcl/ )
Die tkinter-Bibliothek kostet also Geld für jede Anwendung, die Python einbetten möchte.
Ich selbst habe es geschafft, eine Pythonnet-Bibliothek zu finden:
(MIT-Lizenz)
Mit dem folgenden Befehl ist es möglich, Pythonnet zu installieren:
Und hier finden Sie ein Arbeitsbeispiel für die Verwendung des Dialogfelds zum Öffnen von Dateien:
https://stackoverflow.com/a/50446803/2338477
Lassen Sie mich auch hier ein Beispiel kopieren:
Wenn Sie auch eine komplexere Benutzeroberfläche vermissen, lesen Sie Demo lesen Ordner in Pythonnet Git.
Ich bin mir nicht sicher, ob es auf andere Betriebssysteme portierbar ist, habe es noch nicht versucht, aber .net 5 soll auf mehrere Betriebssysteme portiert werden (Suche nach ".net 5-Plattformen", https://devblogs.microsoft.com/dotnet/introducing) -net-5 / ) - diese Technologie ist also auch zukunftssicher.
quelle