[PYTHON] Erstellen Sie eine Benutzeroberfläche, die VBA durch PySimpleGUI ersetzt (Ausgabe des Dateidialogs, der Liste, des Protokolls).

Was können Sie diesen Artikel lesen

結果.jpg

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.

Überblick

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.

  1. Wählen Sie mehrere zu ladende Dateien aus
  2. Zeigen Sie die ausgewählte Dateiliste an
  3. Optionsauswahl
  4. Führen Sie aus
  5. Protokollieren Sie die Ausgabe der Ausführungsergebnisse

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.

Wählen Sie mehrere zu ladende Dateien aus

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 (';'))

Über Drag & D Drop

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.
[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

Optionsauswahl

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')

Protokollausgabe der Ausführungsergebnisse

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-'),],

In Clip kopieren

Clipstick-bezogen verwendet die folgende Methode von tkinter

Verwenden Sie dieses Mal clipboard_append, um die Protokollwertausgabe nach Output () zu kopieren.

window.FindElement('-MULTILINE-').Widget.clipboard_append( window.FindElement('-MULTILINE-').Get())

Zusammenfassung

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.

Recommended Posts

Erstellen Sie eine Benutzeroberfläche, die VBA durch PySimpleGUI ersetzt (Ausgabe des Dateidialogs, der Liste, des Protokolls).
Machen Sie einen Zylinder mit open3d + STL-Dateiausgabe
Erstellen Sie mit Django einen Datei-Uploader
Erstellen Sie eine große Textdatei mit Shellscript
VM mit YAML-Datei (KVM) erstellen
Erstellen Sie eine mit tkinter erstellte ausführbare GUI-Datei
Erstelle mit pygame2 eine neue Benutzeroberfläche!
Erstellen Sie eine PDF-Datei mit einer zufälligen Seitengröße
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Erstellen Sie mit Python eine Datei im Photoshop-Format (.psd)
Dateidialog mit Python-GUI öffnen (tkinter.filedialog)
Erstellen Sie mit PyInstaller eine exe-Datei, die in einer Windows-Umgebung ohne Python funktioniert
Erstellen Sie einen Chatbot, der die kostenlose Eingabe mit Word2Vec unterstützt
Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen
[Python] Erstellen Sie mit cx_Freeze eine Verteilungsdatei für das Tkinter-Programm
Erstellen Sie eine 2D-CAD-Datei ".dxf" mit Python [ezdxf]
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Erstellen Sie eine PythonBox, die nach der PEPPER-Eingabe mit Random ausgegeben wird
[Python] Erstellen Sie mit tkinter einen Bildschirm zur Datei- und Ordnerpfadspezifikation
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Erstellen Sie ein Lebensspiel, das manuell mit tkinter aktualisiert wird
Tornado - Erstellen wir eine Web-API, die JSON problemlos mit JSON zurückgibt
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann