Verwenden Sie PySimpleGUI, um Dateien und Ordner mithilfe von Dialogen abzurufen. Sie können den Vorgang mit der erfassten Datei ausführen und das Protokoll auf dem Bildschirm anzeigen.
Es gibt einige Artikel und Bücher, die Python als De-VBA verwenden, und Artikel, die OpenPyXl zum Bearbeiten von Excel-Dateien verwenden Es gibt, aber die meisten Dateien werden von CLI gestartet, und ich sehe nicht viele Artikel, die mit GUI arbeiten. Dieses Mal werde ich erklären, wie PySimpleGUI verwendet wird, um etwas zu tun, das der VBA-GUI entspricht. Informationen zur grundlegenden Funktionsweise von PySimpleGUI finden Sie unter Wenn Sie Tkinter verwenden, versuchen Sie es mit PySimpleGUI.
Wenn Sie beispielsweise mehrere Dateien in Excel lesen und zu einer Datei kombinieren möchten, sind möglicherweise die folgenden Vorgänge und Anzeigen erforderlich.
Der Code lautet wie folgt. Dieses Mal ist die Funktion der Excel-Operation nicht aufgeführt. Es ist nur die Erklärung des GUI-Teils.
#Originaldatei https://pysimplegui.trinket.io/demo-programs#/examples-for-reddit-posts/visual-basic-mockup
import PySimpleGUI as sg
from os.path import basename
frame1 = [[sg.Radio('Organisieren Sie jedes Blatt in einer Datei', 1, key='-MULTI-SHEET-', default=True)],
[sg.Radio('Kombinieren Sie in 1 Datei und 1 Blatt', 1, key='-ONE-SHEET-')]]
col1 = [[sg.Button('Lauf')],
[sg.Button('Ende')]]
layout = [[sg.Text('Dateiauswahl', size=(15, 1), justification='right'),
sg.InputText('Dateiliste', enable_events=True,),
sg.FilesBrowse('Datei hinzufügen', key='-FILES-', file_types=(('Excel-Datei', '*.xlsx'),))],
[sg.Button('Protokoll kopieren'), sg.Button('Protokoll löschen')],
[sg.Output(size=(100, 5), key='-MULTILINE-')],
[sg.Button('Löschen Sie die Eingabeliste')],
[sg.Listbox([], size=(100, 10), enable_events=True, key='-LIST-')],
[sg.Frame('Inhalte verarbeiten', frame1), sg.Column(col1)]]
window = sg.Window('Excel-Kombination', layout)
new_files = []
new_file_names = []
while True: # Event Loop
event, values = window.read()
if event in (None, 'Ende'):
break
if event == 'Lauf':
print('Verarbeitung ausführen')
print('Zu verarbeitende Datei:', new_files)
#Die Verarbeitung ändert sich je nach Wert des Optionsfelds
if values['-MULTI-SHEET-']:
print('Kombinieren Sie mehrere Blätter zu einer Datei')
elif values['-ONE-SHEET-']:
print('Kombinieren Sie mehrere Blätter zu einem Blatt')
#Pop-up
sg.popup('Die Verarbeitung wurde normal beendet')
elif event == 'Protokoll löschen':
print('Protokoll löschen')
window.FindElement('-MULTILINE-').Update('')
elif event == 'Protokoll kopieren':
window.FindElement('-MULTILINE-').Widget.clipboard_append(window.find_element('-MULTILINE-').Get())
sg.popup('Ich habe das Protokoll kopiert')
elif event == 'Löschen Sie die Eingabeliste':
print('Löschen Sie die Eingabeliste')
new_files.clear()
new_file_names.clear()
window['-LIST-'].update('')
elif values['-FILES-'] != '':
print('FilesBrowse')
# TODO:Es muss verarbeitet werden, ob die Dateien für den tatsächlichen Betrieb identisch sind
new_files.extend(values['-FILES-'].split(';'))
new_file_names.extend([basename(file_path) for file_path in new_files])
print('Datei hinzufügen')
window['-LIST-'].update(new_file_names) #Anzeige im Listenfeld
window.close()
Unten finden Sie eine Einführung zu jeder Funktion.
Es gibt die folgenden drei Schaltflächen (Methoden), um eine Datei mit PySimpleGUI anzugeben.
Im Betrieb wird beim Hinzufügen zum Layout eine Schaltfläche angezeigt. Wenn Sie darauf klicken, wird ein Dialogfeld angezeigt und die im Dialogfeld ausgewählte Datei wird angezeigt. Sie können die ausgewählte Datei mit einem absoluten Pfad erhalten.
Unten finden Sie ein Beispiel für den Code. Dieser Code basiert auf dem offiziellen Visual Basic Mockup. Ich werde.
import PySimpleGUI as sg
sg.InputText('Dateiliste',enable_events=True,), sg.FilesBrowse('Datei hinzufügen', key='-FILES-', file_types=(("Excel-Datei", "*.xlsx"),))],
Wenn Sie mit FilesBrowse
mehrere Dateien erhalten, lautet der Wert" Absoluter Pfad von Datei 1; Absoluter Pfad von Datei; ". Sie können die Datei erhalten, indem Sie sie mit values ['-FILES-'] teilen. Split (';'))
Die Drag & Drop-Funktion ist in tkinter, das standardmäßig mit Python geliefert wird, nicht enthalten. Es scheint, dass Sie dies tun können, indem Sie die Erweiterung selbst installieren.
PySimpleGUI ist ein Wrapper für tkinter, daher gibt es keine Drag & Drop-Funktion. Wenn Sie sich jedoch die Python 3.9-Dokumentation ansehen, finden Sie die folgende Seite, also in der nächsten Version von 3.9 Drag & Drop ist möglicherweise mit tkinter möglich, das mit Python geliefert wird, und Drag & Drop-Funktionen können in der PySimple-GUI hinzugefügt werden.
Aktualisiert am 6. Februar 2020: Ich wurde offiziell informiert. Es scheint, dass Drag & Drop von tkinter nur mit Drag & Drop in der App kompatibel ist. Es wurde gesagt, dass PySimpleGUIQt Drag & Drop des Explorers unterstützt.
# Zeigen Sie die Liste der ausgewählten Dateien an Verwenden Sie diesmal das Listenfeld, um die ausgewählten Dateien aufzulisten. In PySimpleGUI wird es mit `Listbox ()` angezeigt.I think the tkinter drag and drop support is only within the application. I don't see how you can drag and drop a file from Windows explorer for example, which is the most likely source of a drag and drop.
— PySimpleGUI (@PySimpleGUI) February 15, 2020
It's supported in PySimpleGUIQt for the Input and Multiline elements.
[sg.Listbox([], size=(100, 10), enable_events=True, key='-LIST-')],
Um den eingegebenen Inhalt in ein Listenfeld zu verwandeln, verwenden Sie zum Aktualisieren die Methode update ()
der Klasse window
.
window['-LIST-'].update(new_file_names) #Anzeige im Listenfeld
Mit dem Optionsfeld wird die Option ausgewählt.
frame1 = [[sg.Radio('Organisieren Sie jedes Blatt in einer Datei',1, key='-MULTI-SHEET-', default=True)],
[sg.Radio('Kombinieren Sie in 1 Datei und 1 Blatt', 1, key='-ONE-SHEET-')]]
Welcher Wert des Optionsfelds zum Zeitpunkt der Ausführung ausgewählt ist, hängt davon ab, ob der in key
eingestellte Wert True
ist.
if values['-MULTI-SHEET-']:
print('Kombinieren Sie mehrere Blätter zu einer Datei')
elif values['-ONE-SHEET-']:
print('Kombinieren Sie mehrere Blätter zu einem Blatt')
Verwenden Sie das Element Output ()
, um die Ausführung auf dem Bildschirm anzuzeigen. Wenn dies platziert ist, wird der durch print ()
beschriebene Inhalt ausgegeben.
[sg.Output(size=(100,5), key='-MULTILINE-'),],
Clipstick-bezogen verwendet die folgende Methode von tkinter
widget.clipboard_get()
widget.clipboard_clear()
widget.clipboard_append()
Verwenden Sie dieses Mal clipboard_append
, um die Protokollwertausgabe nach Output ()
zu kopieren.
window.FindElement('-MULTILINE-').Widget.clipboard_append( window.FindElement('-MULTILINE-').Get())
Ich habe vorgestellt, wie man mit PySimpleGUI eine VBA-äquivalente GUI erstellt. Öffnen Sie einen Dialog und wählen Sie eine Datei aus. Ich denke, dass die GUI, die die ausgewählte Datei verarbeiten kann, nützlich ist.