GUI do Python em 5 minutos

imagem

Python é fácil de usar. Nele, você pode encontrar um grande número de bibliotecas para qualquer coisa. E essa é sua principal vantagem. Você não fará nada em algumas linhas de código. Se você precisa de scripts para uso pessoal ou para um público mais experiente em tecnologia, não precisa nem pensar em uma interface gráfica.

No entanto, às vezes seu público-alvo não é muito técnico. As pessoas não se importam em usar seus scripts Python até precisarem olhar para uma linha de código. Nesse caso, os scripts de linha de comando não serão suficientes. Idealmente, você precisa de uma interface gráfica. O objetivo deste post é usar apenas Python.

Bibliotecas Python que você pode usar para uma GUI


Essencialmente, existem três ótimas bibliotecas Python para a GUI; Tkinter, wxPython e PyQT. Olhando para eles, não encontrei nada do que eu gostasse no Python. As bibliotecas Python tendem a abstrair muito bem de problemas super-técnicos. Se eu precisasse trabalhar com programação orientada a objetos, também poderia fazer o download de Java ou .Net.

EDISON Software - desenvolvimento web
Este artigo foi traduzido com o suporte do software EDISON, que cuida da saúde dos programadores e do café da manhã e também desenvolve software personalizado .


No entanto, felizmente, me deparei com a quarta opção, de que gostei. Este é PySimpleGUI, eu ainda o uso. Curiosamente, esta biblioteca usa todas as três bibliotecas populares, que foram discutidas acima, mas ao mesmo tempo abstrai de pontos super técnicos

Vamos mergulhar nesta biblioteca e estudá-la enquanto resolvemos um problema real.

Verifique dois arquivos idênticos


Eu disse como fazer isso no meu artigo "3 maneiras rápidas de comparar dados em Python". Podemos usar a primeira seção, verificação de integridade de dados, para tentar criar uma interface de usuário.


De fato, precisamos baixar dois arquivos e selecionar a criptografia que gostaríamos de usar para comparar os arquivos.

Programar a GUI


Para criar uma interface gráfica, você pode 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, obtemos:

imagem

Nós conectamos a lógica


Quando existe uma interface do usuário, é fácil entender como conectar o restante do código. Só precisamos acompanhar o que o usuário digita e agir de acordo. Podemos fazer isso muito facilmente com o seguinte 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() 

Ele nos dará este resultado:

imagem

Considerações finais


Essa pode não ser a interface de usuário mais bonita, mas o PySimpleGUI permite implantar rapidamente interfaces de usuário simples do Python e compartilhá-las com qualquer pessoa. O código necessário para isso é simples e fácil de ler. Você ainda terá um problema ao executar o código para obter a interface do usuário. Por isso, pode ser difícil compartilhar código. Aconselho que você baixe algo como PyInstaller, que transformará seu script python em um arquivo .exe. As pessoas poderão lançá-lo simplesmente clicando nele duas vezes.


Leia também o blog
Empresa EDISON:


20 bibliotecas para
aplicação iOS espetacular

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


All Articles