PySimpleGUI/Demo DisplayHash1and256.py
MikeTheWatchGuy a77dc1c724 Fixed message box text width, renamed Display Hash, added Duplicate file finder
FINALLY got the message box text width sizing correct.  Required change to Text Elements so watch out for possible side effects.
Added a new Duplicate File Finder demo program that uses an input form an a progress meter
2018-07-15 19:21:06 -04:00

123 lines
5.2 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 *')
def HashManuallyBuiltGUINonContext():
# ------- Form design ------- #
form = SG.FlexForm('SHA-1 & 256 Hash', AutoSizeText=True)
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)
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():
HashManuallyBuiltGUINonContext()
HashMostCompactGUI()
# ====____====____==== 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()