Tkinter、wxPython 和 PyQT 是 Python 开发图形界面的三大利器。但他们使用起来都不是太方便。
直到我遇到了 PySimpleGUI,我才开始觉得搞一个图形界面也是已经容易的事。
比如说开发一个工具,检查两个文件是否相同,当然了要有图形界面。
使用 PySimpleGUI 代码如下:
import PySimpleGUI as sglayout = [[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 Loopevent, values = window.read()# print(event, values) #debugif event in (None, 'Exit', 'Cancel'):break
上述代码就会产生如下的用户界面:
有了 UI,就可以很容易地了解如何插入其余的代码。我们只需要监控用户输入的内容,然后相应地采取行动。我们可以很容易地做到这一点,使用以下代码:
import PySimpleGUI as sgimport reimport hashlibdef 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 considerationsfor 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 Loopevent, values = window.read()# print(event, values) #debugif event in (None, 'Exit', 'Cancel'):breakif 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 = 1if not file1 and file1 is not None:print('Error: File 1 path not valid.')isitago = 0elif not file2 and file2 is not None:print('Error: File 2 path not valid.')isitago = 0elif 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 compareif values[1] == True: algos.append('MD5')if values[2] == True: algos.append('SHA1')if values[4] == True: algos.append('SHA256')filepaths = [] #filesfilepaths.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()
运行结果如下:
image.png
最后的话:
虽然不是最漂亮的 UI,但该库允许您快速启动简单的 Python UI,并与您可能需要的任何人共享。更重要的是,您需要执行此操作的代码简单且可读性强。您仍然会遇到必须运行代码才能获取 UI 的问题,这可能会使共享有点困难,但是您可以考虑使用 PyInstaller 之类的东西,它将您的 python 脚本转换为人们只需双击的 exe。
作者:somenzz
链接:https://www.jianshu.com/p/a37180c53a07
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
