5分钟内完成Python GUI

图片

Python易于使用。 在其中,您可以找到大量用于任何内容的库。 这是他的主要优势。 只需几行代码,您就不会做任何事情。 如果您需要个人使用或精通技术的脚本,那么您甚至不必考虑图形界面。

但是,有时您的目标受众不是很精通技术。 人们不介意使用您的Python脚本,直到他们只需要看一行代码。 在这种情况下,命令行脚本是不够的。 理想情况下,您需要图形界面。 这篇文章的目的是仅使用Python。

可用于GUI的Python库


本质上,GUI有3个很棒的Python库。 Tkinter,wxPython和PyQT。 看着它们,我没有发现关于Python的任何东西。 Python库倾向于从超级技术问题中很好地抽象出来。 如果需要使用面向对象的编程,则可以下载Java或.Net。

EDISON软件-网络开发
本文是在EDISON Software的支持下翻译的,EDISON Software 照顾了程序员的健康和早餐 ,并开发了定制软件


但是,幸运的是,我遇到了我喜欢的第四个选项。 这是PySimpleGUI,我仍然使用它。 奇怪的是,该库使用了上面讨论的所有3种流行的库,但同时又从超级技术要点中提取了摘要

让我们深入研究这个库,并在解决一个实际问题的同时对其进行研究。

检查两个相同的文件


我在文章“在Python中比较数据的3种快速方法”中介绍了如何执行此操作。 我们可以使用第一部分(数据完整性检查)来尝试创建用户界面。


实际上,我们需要下载两个文件,然后选择要用于比较文件的加密。

编程GUI


要创建图形界面,可以使用以下代码:

import PySimpleGUI as sg 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 Loop event, values = window.read() # print(event, values) #debug if event in (None, 'Exit', 'Cancel'): break 

结果,我们得到:

图片

我们连接逻辑


当有一个用户界面时,很容易理解如何连接其余代码。 我们只需要跟踪用户输入的内容并采取相应的措施即可。 我们可以使用以下代码轻松完成此操作:

 import PySimpleGUI as sg import re import hashlib def 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 considerations for 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 Loop event, values = window.read() # print(event, values) #debug if event in (None, 'Exit', 'Cancel'): break if 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 = 1 if not file1 and file1 is not None: print('Error: File 1 path not valid.') isitago = 0 elif not file2 and file2 is not None: print('Error: File 2 path not valid.') isitago = 0 elif 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 compare if values[1] == True: algos.append('MD5') if values[2] == True: algos.append('SHA1') if values[4] == True: algos.append('SHA256') filepaths = [] #files filepaths.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() 

他会给我们这个结果:

图片

最后的想法


这可能不是最漂亮的用户界面,但是PySimpleGUI允许您快速部署简单的Python用户界面并与任何人共享。 为此所需的代码简单易读。 您仍然会在运行代码以获取用户界面时遇到问题。 因此,共享代码可能很困难。 我建议您下载PyInstaller之类的东西,它将把您的python脚本转换为.exe文件。 人们只需单击两次就可以启动它。


另请阅读博客
EDISON公司:


20个图书馆
壮观的iOS应用程序

Source: https://habr.com/ru/post/zh-CN480884/


All Articles