Utilisez PySimpleGUI pour obtenir des fichiers et des dossiers à l'aide de boîtes de dialogue, Vous pouvez exécuter le processus à l'aide du fichier acquis et afficher le journal à l'écran.
Il existe des articles et des livres qui utilisent Python comme de-VBA, et des articles qui utilisent OpenPyXl pour manipuler les fichiers Excel. Il y en a, mais la plupart des fichiers sont démarrés par CLI, et je ne vois pas beaucoup d'articles qui fonctionnent avec l'interface graphique. Cette fois, je vais vous expliquer comment utiliser PySimpleGUI pour faire quelque chose d'équivalent à VBA GUI. Pour le fonctionnement de base de PySimpleGUI, reportez-vous à Si vous utilisez Tkinter, essayez d'utiliser PySimpleGUI.
Par exemple, si vous souhaitez lire plusieurs fichiers dans Excel et les combiner en un seul fichier, les opérations et affichages suivants peuvent être nécessaires.
Le code est comme suit. Cette fois, la fonction de l'opération Excel n'est pas répertoriée. Ce n'est que l'explication de la partie GUI.
#Fichier original 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('Organisez chaque feuille en un seul fichier', 1, key='-MULTI-SHEET-', default=True)],
[sg.Radio('Combinez en 1 fichier et 1 feuille', 1, key='-ONE-SHEET-')]]
col1 = [[sg.Button('Courir')],
[sg.Button('Fin')]]
layout = [[sg.Text('Sélection de fichiers', size=(15, 1), justification='right'),
sg.InputText('Liste des fichiers', enable_events=True,),
sg.FilesBrowse('Ajouter le fichier', key='-FILES-', file_types=(('fichier Excel', '*.xlsx'),))],
[sg.Button('Copier le journal'), sg.Button('Effacer le journal')],
[sg.Output(size=(100, 5), key='-MULTILINE-')],
[sg.Button('Effacer la liste des entrées')],
[sg.Listbox([], size=(100, 10), enable_events=True, key='-LIST-')],
[sg.Frame('Traitement du contenu', frame1), sg.Column(col1)]]
window = sg.Window('Combinaison Excel', layout)
new_files = []
new_file_names = []
while True: # Event Loop
event, values = window.read()
if event in (None, 'Fin'):
break
if event == 'Courir':
print('Exécuter le traitement')
print('Dossier à traiter:', new_files)
#Traitement des changements en fonction de la valeur du bouton radio
if values['-MULTI-SHEET-']:
print('Combinez plusieurs feuilles en un seul fichier')
elif values['-ONE-SHEET-']:
print('Combinez plusieurs feuilles en une seule feuille')
#Apparaitre
sg.popup('Le traitement s'est terminé normalement')
elif event == 'Effacer le journal':
print('Effacer le journal')
window.FindElement('-MULTILINE-').Update('')
elif event == 'Copier le journal':
window.FindElement('-MULTILINE-').Widget.clipboard_append(window.find_element('-MULTILINE-').Get())
sg.popup('J'ai copié le journal')
elif event == 'Effacer la liste des entrées':
print('Effacer la liste des entrées')
new_files.clear()
new_file_names.clear()
window['-LIST-'].update('')
elif values['-FILES-'] != '':
print('FilesBrowse')
# TODO:Il est nécessaire de déterminer si les fichiers sont les mêmes pour le fonctionnement réel
new_files.extend(values['-FILES-'].split(';'))
new_file_names.extend([basename(file_path) for file_path in new_files])
print('Ajouter le fichier')
window['-LIST-'].update(new_file_names) #Afficher dans la zone de liste
window.close()
Vous trouverez ci-dessous une introduction à chaque fonction.
Il existe les trois boutons (méthodes) suivants pour spécifier un fichier avec PySimpleGUI.
Sur le plan opérationnel, lorsque vous l'ajoutez à la mise en page, un bouton s'affiche, lorsque vous cliquez dessus, une boîte de dialogue s'affiche et le fichier sélectionné dans la boîte de dialogue s'affiche. Vous pouvez obtenir le fichier sélectionné avec un chemin absolu.
Voici un exemple de code. En outre, ce code a ajouté des fonctions en faisant référence à la [maquette Visual Basic] officielle (https://pysimplegui.trinket.io/demo-programs#/examples-for-reddit-posts/visual-basic-mockup). Je vais.
import PySimpleGUI as sg
sg.InputText('Liste des fichiers',enable_events=True,), sg.FilesBrowse('Ajouter le fichier', key='-FILES-', file_types=(("fichier Excel", "*.xlsx"),))],
Si vous obtenez plusieurs fichiers avec FilesBrowse
, la valeur est" Chemin absolu du fichier 1; Chemin absolu du fichier; ". Vous pouvez obtenir le fichier en le divisant avec values ['-FILES-']. Split (';'))
La fonction glisser-déposer n'est pas incluse dans tkinter fourni avec Python en standard. Il semble que vous puissiez le faire en installant vous-même l'extension.
PySimpleGUI est un wrapper pour tkinter, il n'y a donc pas de fonction glisser-déposer. Cependant, si vous regardez la documentation de Python 3.9, vous trouverez la page suivante, donc dans la prochaine version de 3.9 Le glisser-déposer peut être possible avec tkinter fourni avec Python, et des fonctions de glisser-déposer peuvent être ajoutées dans l'interface graphique PySimple.
Mise à jour le 6 février 2020: j'ai été officiellement informé. Il semble que le glisser-déposer de tkinter ne soit compatible qu'avec le glisser-déposer dans l'application. Il a été dit que PySimpleGUIQt prend en charge le glisser-déposer d'Explorateur.
# Afficher la liste des fichiers sélectionnés Pour lister les fichiers sélectionnés, utilisez cette fois la zone de liste pour les afficher. Dans PySimpleGUI, il est affiché en utilisant `Listbox ()`.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-')],
Pour rendre le contenu entré dans une zone de liste, utilisez la méthode ʻupdate () de la classe
window` pour mettre à jour.
window['-LIST-'].update(new_file_names) #Afficher dans la zone de liste
La sélection d'option est implémentée à l'aide du bouton radio.
frame1 = [[sg.Radio('Organisez chaque feuille en un seul fichier',1, key='-MULTI-SHEET-', default=True)],
[sg.Radio('Combinez en 1 fichier et 1 feuille', 1, key='-ONE-SHEET-')]]
La valeur du bouton radio sélectionnée au moment de l'exécution est déterminée par le fait que la valeur définie dans «key» est «True».
if values['-MULTI-SHEET-']:
print('Combinez plusieurs feuilles en un seul fichier')
elif values['-ONE-SHEET-']:
print('Combinez plusieurs feuilles en une seule feuille')
Utilisez l'élément ʻOutput () pour afficher l'exécution à l'écran. Si cela est placé, le contenu décrit par
print ()` sera affiché.
[sg.Output(size=(100,5), key='-MULTILINE-'),],
Clipstick utilise la méthode suivante de tkinter
widget.clipboard_get()
widget.clipboard_clear()
--Supprimez le contenu du presse-papiers.widget.clipboard_append()
--Ajoutez une valeur au presse-papiers.Cette fois, utilisez clipboard_append
pour copier la valeur de sortie du journal dans ʻOutput ()`.
window.FindElement('-MULTILINE-').Widget.clipboard_append( window.FindElement('-MULTILINE-').Get())
J'ai présenté comment créer une interface graphique équivalente à VBA avec PySimpleGUI. Ouvrez une boîte de dialogue et sélectionnez un fichier. Je pense que l'interface graphique permettant de traiter le fichier sélectionné est utile.
Recommended Posts