text: #Importa as bilbiotecas necessárias
  from tkinter import *
  from tkinter import filedialog
  import hashlib
   
  #Cria e configura a janela principal do programa
  root = Tk()
  root.title("Hash de Arquivos")
  root.resizable(False, False)
  root.geometry("565x220+433+234")
   
  #Variáveis para que os objetos tipo tkinter.Entry recebam seu conteúdo
  stringArquivo = StringVar()
  stringMD5 = StringVar()
  stringSHA1 = StringVar()
  stringSHA224 = StringVar()
  stringSHA256 = StringVar()
  stringSHA384 = StringVar()
  stringSHA512 = StringVar()
   
  #Função para escolher o arquivo e gerar os hashes dele
  def hashArquivo():
      caminho = filedialog.askopenfilename()
      stringArquivo.set(caminho)
      arquivo = open(caminho, 'rb')
   
      bufferSize = 65536      #Para usar na função uptade
   
      # Apenas declara os objetos dos tipos de hash
      md5 = hashlib.md5()
      sha1 = hashlib.sha1()
      sha224 = hashlib.sha224()
      sha256 = hashlib.sha256()
      sha384 = hashlib.sha384()
      sha512 = hashlib.sha512()
   
      # Atualiza todos os hashes ao mesmo tempo, senão necessitaríamos retornar o ponteiro do arquivo
      while True:  # Laço para ler os bytes do arquivo e atualizar os hashes
          data = arquivo.read(bufferSize)  # Lê do arquivo a quantidade de bytes determinada
          if not data:  # Se não houver mais dados a serem lidos ele sai do laço
              break
          md5.update(data)  # Atualiza os hashes
          sha1.update(data)
          sha224.update(data)
          sha256.update(data)
          sha384.update(data)
          sha512.update(data)
   
      #Escreve o resultado nos objeto do tipo tkinter.
      stringMD5.set(md5.hexdigest())
      stringSHA1.set(sha1.hexdigest())
      stringSHA224.set(sha224.hexdigest())
      stringSHA256.set(sha256.hexdigest())
      stringSHA384.set(sha384.hexdigest())
      stringSHA512.set(sha512.hexdigest())
   
      arquivo.close()     #Fecha o arquivo
   
  #Cria e configura os objetos do tipo tkinter.Label
  lb1 = Label(root, text="Arquivo").place(x=5, y=5)
  lb2 = Label(root, text="MD5").place(x=5, y=35)
  lb3 = Label(root, text="SHA1").place(x=5, y=65)
  lb4 = Label(root, text="SHA224").place(x=5, y=95)
  lb5 = Label(root, text="SHA256").place(x=5, y=125)
  lb6 = Label(root, text="SHA384").place(x=5, y=155)
  lb7 = Label(root, text="SHA512").place(x=5, y=185)
   
  #Cria e configura os objetos do tipo tkinter.Entry
  et1 = Entry(root, width=65, textvariable=stringArquivo).place(x=55, y=5)
  et2 = Entry(root, width=65, textvariable=stringMD5).place(x=55, y=35)
  et3 = Entry(root, width=65, textvariable=stringSHA1).place(x=55, y=65)
  et4 = Entry(root, width=65, textvariable=stringSHA224).place(x=55, y=95)
  et5 = Entry(root, width=65, textvariable=stringSHA256).place(x=55, y=125)
  et6 = Entry(root, width=65, textvariable=stringSHA384).place(x=55, y=155)
  et7 = Entry(root, width=65, textvariable=stringSHA512).place(x=55, y=185)
   
  #Cria e configura o objeto do tipo tkinter.Button
  bt1 = Button(root, text="Escolher arquivo", height=2, command=hashArquivo).place(x=460, y=5)
   
  #mainloop() serve para abrir a janela do programa e "ouvir" o que seus componentes fazem
  root.mainloop()