Python GUI en 5 minutos

imagen

Python es fácil de usar. En él puedes encontrar una gran cantidad de bibliotecas para cualquier cosa. Y esta es su principal ventaja. No harás nada desde unas pocas líneas de código. Si necesita guiones para uso personal o para un público experto en tecnología, ni siquiera tiene que pensar en una interfaz gráfica.

Sin embargo, a veces su público objetivo no es muy experto en tecnología. A las personas no les importa usar sus scripts de Python hasta que necesiten mirar una línea de código. En este caso, los scripts de línea de comando no serán suficientes. Idealmente, necesita una interfaz gráfica. El propósito de esta publicación es usar solo Python.

Bibliotecas de Python que puede usar para una GUI


Esencialmente, hay 3 excelentes bibliotecas de Python para la GUI; Tkinter, wxPython y PyQT. Al mirarlos, no encontré nada que me gustara de Python. Las bibliotecas de Python tienden a abstraerse muy bien de problemas súper técnicos. Si necesitaba trabajar con programación orientada a objetos, podría descargar Java o .Net.

Software EDISON - desarrollo web
Este artículo fue traducido con el apoyo del software EDISON, que se ocupa de la salud de los programadores y su desayuno , y también desarrolla software personalizado .


Sin embargo, afortunadamente, encontré la cuarta opción, que me gustó. Esto es PySimpleGUI, todavía lo uso. Por extraño que parezca, esta biblioteca utiliza las 3 bibliotecas populares, que se discutieron anteriormente, pero al mismo tiempo resúmenes de puntos súper técnicos

Vamos a sumergirnos en esta biblioteca y estudiarla mientras resolvemos un problema real.

Verifica dos archivos idénticos


Le dije cómo hacer esto en mi artículo "3 formas rápidas de comparar datos en Python". Podemos usar la primera sección, comprobación de integridad de datos, para intentar crear una interfaz de usuario.


De hecho, necesitamos descargar dos archivos y seleccionar el cifrado que nos gustaría usar para comparar los archivos.

Programar la GUI


Para crear una interfaz gráfica, puede usar este código:

import PySimpleGUI as sg layout = [ [sg.Text('File 1'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('MD5'), sg.Checkbox('SHA1') ], [sg.Text('File 2'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('SHA256') ], [sg.Output(size=(88, 20))], [sg.Submit(), sg.Cancel()] ] window = sg.Window('File Compare', layout) while True: # The Event Loop event, values = window.read() # print(event, values) #debug if event in (None, 'Exit', 'Cancel'): break 

Como resultado, obtenemos:

imagen

Conectamos la lógica


Cuando hay una interfaz de usuario, es fácil entender cómo conectar el resto del código. Solo necesitamos hacer un seguimiento de lo que ingresa el usuario y actuar en consecuencia. Podemos hacer esto muy fácilmente con el siguiente código:

 import PySimpleGUI as sg import re import hashlib def hash(fname, algo): if algo == 'MD5': hash = hashlib.md5() elif algo == 'SHA1': hash = hashlib.sha1() elif algo == 'SHA256': hash = hashlib.sha256() with open(fname) as handle: #opening the file one line at a time for memory considerations for line in handle: hash.update(line.encode(encoding = 'utf-8')) return(hash.hexdigest()) layout = [ [sg.Text('File 1'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('MD5'), sg.Checkbox('SHA1') ], [sg.Text('File 2'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('SHA256') ], [sg.Output(size=(88, 20))], [sg.Submit(), sg.Cancel()] ] window = sg.Window('File Compare', layout) while True: # The Event Loop event, values = window.read() # print(event, values) #debug if event in (None, 'Exit', 'Cancel'): break if event == 'Submit': file1 = file2 = isitago = None # print(values[0],values[3]) if values[0] and values[3]: file1 = re.findall('.+:\/.+\.+.', values[0]) file2 = re.findall('.+:\/.+\.+.', values[3]) isitago = 1 if not file1 and file1 is not None: print('Error: File 1 path not valid.') isitago = 0 elif not file2 and file2 is not None: print('Error: File 2 path not valid.') isitago = 0 elif values[1] is not True and values[2] is not True and values[4] is not True: print('Error: Choose at least one type of Encryption Algorithm') elif isitago == 1: print('Info: Filepaths correctly defined.') algos = [] #algos to compare if values[1] == True: algos.append('MD5') if values[2] == True: algos.append('SHA1') if values[4] == True: algos.append('SHA256') filepaths = [] #files filepaths.append(values[0]) filepaths.append(values[3]) print('Info: File Comparison using:', algos) for algo in algos: print(algo, ':') print(filepaths[0], ':', hash(filepaths[0], algo)) print(filepaths[1], ':', hash(filepaths[1], algo)) if hash(filepaths[0],algo) == hash(filepaths[1],algo): print('Files match for ', algo) else: print('Files do NOT match for ', algo) else: print('Please choose 2 files.') window.close() 

Nos dará este resultado:

imagen

Pensamientos finales


Puede que esta no sea la interfaz de usuario más hermosa, pero PySimpleGUI le permite implementar rápidamente interfaces de usuario simples de Python y compartirlas con cualquier persona. El código que necesita para esto es simple y fácil de leer. Aún tendrá un problema al ejecutar el código para obtener la interfaz de usuario. Debido a esto, puede ser difícil compartir código. Te aconsejo que descargues algo como PyInstaller, que convertirá tu script de Python en un archivo .exe. Las personas podrán iniciarlo simplemente haciendo clic en él dos veces.


Lee también el blog
Empresa EDISON:


20 bibliotecas para
espectacular aplicación para iOS

Source: https://habr.com/ru/post/480884/


All Articles