PySimpleGUI/DemoDisplayHash1and256.py

104 lines
4.3 KiB
Python

#!Python 3
import hashlib
import PySimpleGUI as SG
#########################################################################
# DisplayHash #
# A PySimpleGUI demo app that displays SHA1 hash for user browsed file #
# Useful and a recipe for GUI success #
#########################################################################
# ====____====____==== FUNCTION compute_hash_for_file(filename) ====____====____==== #
# Reads a file, computes the Hash #
# ---------------------------------------------------------------------------------- #
def compute_sha1_hash_for_file(filename):
try:
x = open(filename, "rb").read()
except:
return 0
m = hashlib.sha1()
m.update(x)
f_sha = m.hexdigest()
return f_sha
# ====____====____==== FUNCTION compute_hash_for_file(filename) ====____====____==== #
# Reads a file, computes the Hash #
# ---------------------------------------------------------------------------------- #
def compute_sha256_hash_for_file(filename):
try:
f = open(filename, "rb")
x = f.read()
except:
return 0
m = hashlib.sha256()
m.update(x)
f_sha = m.hexdigest()
return f_sha
# ====____====____==== Uses A GooeyGUI GUI ====____====____== #
# Get the filename, display the hash, dirt simple all around #
# ----------------------------------------------------------- #
# ---------------------------------------------------------------------- #
# Compute and display SHA1 hash #
# Builds and displays the form using the most basic building blocks #
# ---------------------------------------------------------------------- #
def HashManuallyBuiltGUI():
# ------- Form design ------- #
with SG.FlexForm('SHA-1 & 256 Hash', AutoSizeText=True) as form:
form_rows = [[SG.Text('SHA-1 and SHA-256 Hashes for the file')],
[SG.InputText(), SG.FileBrowse()],
[SG.Submit(), SG.Cancel()]]
(button, (source_filename, )) = form.LayoutAndShow(form_rows)
if button == 'Submit':
if source_filename != '':
hash_sha1 = compute_sha1_hash_for_file(source_filename).upper()
hash_sha256 = compute_sha256_hash_for_file(source_filename).upper()
SG.MsgBox( 'Display A Hash in PySimpleGUI', 'The SHA-1 Hash for the file\n', source_filename, hash_sha1, 'SHA-256 is', hash_sha256, LineWidth=75)
else: SG.MsgBoxError('Display A Hash in PySimpleGUI', 'Illegal filename')
else:
SG.MsgBoxError('Display A Hash in PySimpleGUI', '* Cancelled *')
# ---------------------------------------------------------------------- #
# Compute and display SHA1 hash #
# This one cheats and uses the higher-level Get A File pre-made func #
# Hey, it's a really common operation so why not? #
# ---------------------------------------------------------------------- #
def HashMostCompactGUI():
# ------- INPUT GUI portion ------- #
rc, source_filename = SG.GetFileBox('Display A Hash Using PySimpleGUI',
'Display a Hash code for file of your choice')
# ------- OUTPUT GUI results portion ------- #
if rc == True:
hash = compute_sha1_hash_for_file(source_filename).upper()
SG.MsgBox('Display Hash - Compact GUI', 'The SHA-1 Hash for the file\n', source_filename, hash)
else:
SG.MsgBox('Display Hash - Compact GUI', '* Cancelled *')
# ---------------------------------------------------------------------- #
# Our main calls two GUIs that act identically but use different calls #
# ---------------------------------------------------------------------- #
def main():
# HashMostCompactGUI()
HashManuallyBuiltGUI()
# ====____====____==== Pseudo-MAIN program ====____====____==== #
# This is our main-alike piece of code #
# + Starts up the GUI #
# + Gets values from GUI #
# + Runs DeDupe_folder based on GUI inputs #
# ------------------------------------------------------------- #
if __name__ == '__main__':
main()