def menu_encoding_arquivos_base64(tela_anterior): titulo = 'Encoding base64' layout = retorna_layout_padrao_base64_arquivos(titulo) tela_encoding_base64 = sg.Window(titulo, layout) while True: evento, valores = tela_encoding_base64.read() if evento in ('retornar', None): utilidades_menus.voltar_para_tela_anterior(tela_anterior, tela_encoding_base64) break utilidades_menus.verificar_eventos_gerais(titulo, evento, tela_encoding_base64) if evento == 'executar': resultado = base64_arquivos.encoding_base64_arquivos( valores['pesquisa']) if not resultado: print(dicionarios.retorna_erro_arquivo()) continue try: with open(valores['salvar'], 'w') as arquivo: arquivo.write(resultado) print(dicionarios.retorna_mensagem_sucesso_salvar()) except: print(dicionarios.retorna_mensagem_erro_salvar())
def menu_opcoes(): # Criação do layout do menu opções. opcoes_cifras = dicionarios.retorna_lista_cifras_com_chaves() tela_opcoes = sg.Window('CriPython: Opções', retorna_layout_opcoes(opcoes_cifras)) resposta = '' while True: evento, valores = tela_opcoes.read(timeout=1000) if evento in ('retornar', None): tela_opcoes.close() break utilidades_menu.verificar_eventos_gerais('Opcoes', evento, tela_opcoes) if evento == 'nova_opcao': for indice_cifra, cifra in enumerate(opcoes_cifras): # Atualizar a tela para mostrar apenas as chaves da cifra escolhida atualmente. ''' OBS: São utilizadas duas listas de opções. Uma no idioma padrão português e outra no idioma selecionado pelo usuario. Isso é necessário pois todas as chaves que estão conectadas na interface dos botões e inputs estão em português. ''' if valores["nova_opcao"] == cifra: # Revelar apenas a cifra escolhida tela_opcoes.Element(opcoes_cifras_port[indice_cifra]).update(visible=True) tela_opcoes.Element(opcoes_cifras_port[indice_cifra]).unhide_row() else: # Esconder as outras tela_opcoes.Element(opcoes_cifras_port[indice_cifra]).hide_row() if evento == 'aplicar': resposta = banco_de_dados.aplicar_novas_configuracoes(valores) tela_opcoes.close() opcoes_cifras = dicionarios.retorna_lista_cifras_com_chaves() # Atualizar os nomes de opções de cifras caso mude o idioma. tela_opcoes = sg.Window('CriPython: Opções', retorna_layout_opcoes(opcoes_cifras)) elif evento == 'restaurar': resposta = banco_de_dados.restaurar_padrao() tela_opcoes.close() opcoes_cifras = dicionarios.retorna_lista_cifras_com_chaves() tela_opcoes = sg.Window('CriPython: Opções', retorna_layout_opcoes(opcoes_cifras)) elif resposta: # Imprimir respostas (é preciso esperar um pouco para imprimi-las, por isso é utilizado o timeout). print(resposta) resposta = ''
def executar_menu_cifra(titulo_cifra, tela_anterior, dicionario_funcoes_cifras, layout_cifra): # Criará a janela do menu da cifra e verificará os eventos ocorridos nela (ex: botões clicados, tela foi fechada, inputs,...) tela_cifra = sg.Window(titulo_cifra, layout_cifra) while True: evento, valores = tela_cifra.read() if evento in ('retornar', None): utilidades_menus.voltar_para_tela_anterior(tela_anterior, tela_cifra) break utilidades_menus.verificar_eventos_gerais(titulo_cifra, evento, tela_cifra) if evento == 'encriptar' or evento == 'traduzir' or evento == "utilizar_chave_padrao": for opção, criptografar in dicionario_funcoes_cifras.items(): if valores[opção]: # Verificar a opção escolhida pelo usuário e executar a função referente a ela (armazenada no dicionário). if evento == "utilizar_chave_padrao": lista_chaves = banco_de_dados.retorna_chaves_padroes(titulo_cifra, opção) if not lista_chaves: print(dicionarios.retorna_mensagem_com_bordas(dicionarios.retorna_erro_chave_padrao(), 127)) break else: lista_chaves = [] for nome_item, chave in valores.items(): # Loop para procurar as chaves utilizadas (já que alguns modos utilizam mais que 1) if 'chave' in nome_item: lista_chaves.append(chave) if lista_chaves: # Caso seja encontrado alguma chave, a cifra atual precisa de uma chave para funcionar. print(dicionarios.retorna_mensagem_com_bordas(criptografar(lista_chaves, valores['mensagem']), 127)) else: # Caso nenhuma chave tenha sido encontrada, a cifra atual não necessita de chave. print(dicionarios.retorna_mensagem_com_bordas(criptografar(valores['mensagem']), 127))
def executar_menu_utilitarios(titulo, dicionario_funcoes, tela_anterior, layout_utilitario): tela_utilitario = sg.Window(titulo, layout_utilitario) while True: evento, valores = tela_utilitario.read() if evento in ('retornar', None): utilidades_menus.voltar_para_tela_anterior(tela_anterior, tela_utilitario) break utilidades_menus.verificar_eventos_gerais(titulo, evento, tela_utilitario) if evento == 'executar': for opcao, funcao in dicionario_funcoes.items(): if valores[opcao]: funcao(valores['mensagem'])
def menu_decoding_arquivos_base64(tela_anterior): titulo = 'Decoding base64' layout = retorna_layout_padrao_base64_arquivos(titulo) tela_decoding_base64 = sg.Window(titulo, layout) while True: evento, valores = tela_decoding_base64.read() if evento in ('retornar', None): utilidades_menus.voltar_para_tela_anterior(tela_anterior, tela_decoding_base64) break utilidades_menus.verificar_eventos_gerais(titulo, evento, tela_decoding_base64) if evento == 'executar': try: with open(valores['pesquisa'], 'r') as arquivo: cod_base64 = arquivo.read() print( base64_arquivos.decoding_base64_arquivos( valores['salvar'], cod_base64)) except: print(dicionarios.retorna_erro_arquivo())
def menu_conversor_bases_numericas(tela_anterior): titulo = 'Conversor bases numéricas' dict_funcoes = { 'Binário': bases_numericas.verificar_num_bin, 'Octal': bases_numericas.verificar_num_octal, 'Decimal': bases_numericas.verificar_num_decimal, 'Hexadecimal': bases_numericas.verificar_num_hexadecimal, 'Binário-Octal': bases_numericas.converter_binario_para_octal, 'Binário-Decimal': bases_numericas.converter_binario_para_decimal, 'Binário-Hexadecimal': bases_numericas.converter_binario_para_hexadecimal, 'Octal-Binário': bases_numericas.converter_octal_para_binario, 'Octal-Decimal': bases_numericas.converter_octal_para_decimal, 'Octal-Hexadecimal': bases_numericas.converter_octal_para_hexadecimal, 'Decimal-Binário': bases_numericas.converter_decimal_para_binario, 'Decimal-Octal': bases_numericas.converter_decimal_para_octal, 'Decimal-Hexadecimal': bases_numericas.converter_decimal_para_hexadecimal, 'Hexadecimal-Binário': bases_numericas.converter_hexadecimal_para_binario, 'Hexadecimal-Octal': bases_numericas.converter_hexadecimal_para_octal, 'Hexadecimal-Decimal': bases_numericas.converter_hexadecimal_para_decimal } layout_conversor = retorna_layout_calculadora_bases_numericas() tela_conversor = sg.Window(titulo, layout_conversor) while True: evento, valores = tela_conversor.read() if evento in ('retornar', None): utilidades_menus.voltar_para_tela_anterior(tela_anterior, tela_conversor) break utilidades_menus.verificar_eventos_gerais(titulo, evento, tela_conversor) if evento == 'executar': numero_digitado = valores['mensagem'] primeira_base = '' numero_convertido = '' segunda_base = '' for base_numerica, selecionado in valores.items(): if selecionado: if not primeira_base: # Verificando se o numero digito pelo usuario bate com a primeira base numerica selecionada primeira_base = base_numerica verificacao_de_num = dict_funcoes[primeira_base]( numero_digitado) if not verificacao_de_num and str( verificacao_de_num ) != '0': # Usuario digitou numero errado, mostrar mensagem de erro. numero_convertido = dicionarios.retorna_erro_numero_invalido( ) break else: segunda_base = base_numerica[:-1] if primeira_base != segunda_base: numero_convertido = str( dict_funcoes[f'{primeira_base}-{segunda_base}'] (numero_digitado)) else: numero_convertido = bases_numericas.tirar_zeros_a_esquerda( numero_digitado) break print( dicionarios.retorna_mensagem_com_bordas( numero_convertido, 127))