这篇文章给大家分享一个非常简单的图形界面制作。先给大家展示一下界面:
为什么要学习GUI界面的制作呢?我们常写的python脚本是不能通过双击运行的,通过这样一个界面可以整合自己写的脚本,在打包成exe文件后,通过鼠标点击,就可以完成许多功能,方便快捷。(再也不用去想自己写的脚本在哪个文件夹里啦)
模板代码展示
import PySimpleGUI as sg
import pandas as pd
import matplotlib
matplotlib.use("TkAgg")
sg.ChangeLookAndFeel('GreenTan')
menu_def = [['&使用说明', ['&注意']]]
layout = [
[sg.Menu(menu_def, tearoff=True)],
[sg.Frame(layout=[[sg.Radio('功能1', "RADIO1",size=(15,1),key="func_1"), sg.Radio('功能2', "RADIO1",size=(15,1),key="func_2"), sg.Radio('功能3', "RADIO1",default=True,key="func_3")]],title='功能选项',title_color='green',title_location='n',relief=sg.RELIEF_SUNKEN, tooltip='选择其中一种处理方式' )],
[sg.Text('文件位置', size=(8, 1), auto_size_text=False, justification='right'),sg.InputText(enable_events=True,key="lujing"), sg.Button('浏览',key = 'getf')],
[sg.Button('查看',key = 'look'),sg.Submit('处理',key = 'handle'), sg.Cancel('关闭')]]
window = sg.Window('模板界面', layout, default_element_size=(40, 1), grab_anywhere=False)
while True:
event, values = window.read()
if event == 'getf':
text = sg.popup_get_file('请点击浏览键或自行填入文件绝对路径',title = '获取件',file_types = (("fasta files", "*.txt"),("fasta files", "*.fasta"),))
sg.popup('提示', '是否确认选择文件---', text)
window['lujing'].update(text)
sort_fasta(text)
if event == "look":
sg.popup('can not look ')
if event == "handle":
sg.popup('handle---ing--- ')
if event == "Cancel" or event == sg.WIN_CLOSED:
break
if event == "注意":
sg.popup('Attention! ')
解释说明
我们可以把代码拆分成三个板块来理解:
第一个版块:
matplotlib.use("TkAgg")
sg.ChangeLookAndFeel('GreenTan')
该板块用matplotlib的“use”函数渲染,参数为“TKAgg”,是用Agg渲染器输出到TK绘图面板;PySimpleGUI库(github链接:https://github.com/PySimpleGUI/PySimpleGUI),“ChangeLookAndFeel”函数,用于更改主题(若要选择不同主题可以进入github仓库看作者的注释)。
第二个版块
menu_def = [['&使用说明', ['&注意']]]
layout = [
[sg.Menu(menu_def, tearoff=True)],
[sg.Frame(layout=[[sg.Radio('功能1', "RADIO1",size=(15,1),key="func_1"), sg.Radio('功能2', "RADIO1",size=(15,1),key="func_2"), sg.Radio('功能3', "RADIO1",default=True,key="func_3")]],title='功能选项',title_color='green',title_location='n',relief=sg.RELIEF_SUNKEN, tooltip='选择其中一种处理方式' )],
[sg.Text('文件位置', size=(8, 1), auto_size_text=False, justification='right'),sg.InputText(enable_events=True,key="lujing"), sg.Button('浏览',key = 'getf')],
[sg.Button('查看',key = 'look'),sg.Submit('处理',key = 'handle'), sg.Cancel('关闭')]]
window = sg.Window('模板界面', layout, default_element_size=(40, 1), grab_anywhere=False)
这个版块中主要关注:
- 中文部分,可以和我在文章开头放的预览界面图一一对应起来看,更改图形界面的文字;
- 是关注语句中的“key”,比如说功能1,key是"func_1",意思就是你在点击“功能1”的时候会触发一个功能,这个功能就是"func_1";
- “tooltip”,这个参数表示你鼠标悬停在功能按键上时,显示的文字;
- 大小调整,主要用size去调整按键,文字,整体方框的大小
第三个版块
while True:
event, values = window.read()
if event == 'getf':
text = sg.popup_get_file('请点击浏览键或自行填入文件绝对路径',title = '获取件',file_types = (("fasta files", "*.txt"),("fasta files", "*.fasta"),))
sg.popup('提示', '是否确认选择文件---', text)
window['lujing'].update(text)
sort_fasta(text)
if event == "look":
sg.popup('can not look ')
if event == "handle":
sg.popup('handle---ing--- ')
if event == "Cancel" or event == sg.WIN_CLOSED:
break
if event == "注意":
sg.popup('Attention! ')
这个版块主要用于功能编写,用window.read()语句来获取图形界面发生的事件。此外,可以看到这里用了许多的条件判断语句,if event == "xxxx",假如 if event == "func_1",那么当我们在图形界面点击了“功能1”按钮后,便会触发这个条件,继续执行下面的语句。
通过这个方式我们很轻松地便可以将我们需要实现的功能与图形界面联系起来。比如定义一个功能函数"helloworld",实现“功能1”:
def helloworld():
nf = "helloworld.txt"
with open('nf','a') as n:
n.write("helloworld")
while True:
event, values = window.read()
if event == "func_1":
helloworld()
是不是很简单呢?这里再介绍一下两个语句帮助我们提升使用体验:
- 代码中的
sg.popup()
,用于触发一个弹窗,给用户提示。 - 代码中的
text = sg.popup_get_file('请点击浏览键或自行填入文件绝对路径',title = '获取件',file_types = (("fasta files", "*.txt"),("fasta files", "*.fasta"),))
用于获取本地文件,file_types可以自己编写,写入常用于处理的数据格式,也可以不写text = sg.popup_get_file('请点击浏览键或自行填入文件绝对路径',title = '获取件')
,默认是所有文件格式都可以读取。
打包
打包当然是使用最好用的pyinstaller进行打包,这样就获得一个".exe"的小程序啦!
如果你觉得今天的分享对你有帮助的话,不妨动动小手点个赞吧~~你的点赞是对写作者最大的支持!