大家好,我是小F。 GUI(图形用户界面),顾名思义就是用图形的方式,来显示计算机操作的界面,更加方便且直观。 一个好看又好用的GUI,可以大大提高大家的使用体验,提高效率。 比如你想开发一个计算器,如果只是一个程序输入,输出窗口的话,是没有用户体验的。 所以开发一个图形化的小窗口,就变得很有必要。 今天,小F就给大家介绍如何只用一行Python代码制作一个GUI。 主要使用Python的PySimpleGUI库来完成这个工作。 # 安装PySimpleGUI pip install PySimpleGUI -i https://mirror.baidu.com/pypi/simple
详细的接口文档地址如下。 https://pysimplegui./en/latest/call%20reference/ ▍1、选择文件夹 首先导入PySimpleGUI库,并且用缩写sg来表示。 import PySimpleGUI as sg
# 窗口显示文本框和浏览按钮, 以便选择一个文件夹 dir_path = sg.popup_get_folder('Select Folder') if not dir_path: sg.popup('Cancel', 'No folder selected') raise SystemExit('Cancelling: no folder selected') else: sg.popup('The folder you chose was', dir_path)
通过使用PySimpleGUI的popup_get_folder()方法,一行代码就能实现选择文件夹的操作。 示例如下。 点击Browse按钮,选择文件夹,文本框就会显示出文件夹的绝对路径。 点击OK按钮,显示最终选择的路径信息,再次点击OK按钮,结束窗口。 如果没有选择文件夹,而是直接点击OK按钮,会直接提示没有选取文件夹。 ▍2、选择文件 选择文件操作和上面选择文件夹的有点相似。 不同的是,选择文件可以设置multiple_files(是否为多个文件)和file_types(文件类型)参数。 # 窗口显示文本框和浏览按钮, 以便选择文件 fname = sg.popup_get_file('Choose Excel file', multiple_files=True, file_types=(('Excel Files', '*.xls*'),),) if not fname: sg.popup('Cancel', 'No filename supplied') raise SystemExit('Cancelling: no filename supplied') else: sg.popup('The filename you chose was', fname)
示例如下。
选择了多个Excel文件,最终结果返回了所有文件的路径地址。 ▍3、选择日期 使用popup_get_date()方法,显示一个日历窗口。 # 显示一个日历窗口, 通过用户的选择, 返回一个元组(月, 日, 年) date = sg.popup_get_date() if not date: sg.popup('Cancel', 'No date picked') raise SystemExit('Cancelling: no date picked') else: sg.popup('The date you chose was', date)
示例如下。 选择好日期后,点击OK按钮,即可返回日期元组结果。 ▍4、输入文本 使用popup_get_text()方法,显示一个文本输入框。 # 显示文本输入框, 输入文本信息, 返回输入的文本, 如果取消则返回None text = sg.popup_get_text('Please enter a text:') if not text: sg.popup('Cancel', 'No text was entered') raise SystemExit('Cancelling: no text entered') else: sg.popup('You have entered', text)
键入信息,示例如下。 点击OK按钮,返回输入的文本信息。
如果没有输入,直接点击OK按钮,会提示没有文本输入。 ▍5、弹窗无按钮 # 显示一个弹窗, 但没有任何按钮 sg.popup_no_buttons('You cannot click any buttons')
结果如下。 ▍6、弹窗无标题 # 显示一个没有标题栏的弹窗 sg.popup_no_titlebar('A very simple popup')
结果如下。 ▍7、弹窗只有OK按钮 # 显示弹窗且只有OK按钮 sg.popup_ok('You can only click on 'OK'')
结果如下。 ▍8、弹窗只有Error按钮(红色) # 显示弹窗且只有error按钮, 按钮带颜色 sg.popup_error('Something went wrong')
结果如下。 ▍9、显示通知窗口 # 显示一个“通知窗口”, 通常在屏幕的右下角, 窗口会慢慢淡入淡出 sg.popup_notify('Task done!')
结果如下, Task done提示信息淡入淡出。 ▍10、弹窗选择 # 显示弹窗以及是和否按钮, 选择判断 answer = sg.popup_yes_no('Do you like this video?') sg.popup('You have selected', answer)
结果如下。
▍11、自定义弹窗 上面那些弹窗都是库自带的,如果想自定义创建,可以参考下面的方法。
# 自定义创建弹窗, 一行代码完成 choice, _ = sg.Window( 'Continue?', [[sg.T('Do you want to subscribe to this channel?')], [sg.Yes(s=10), sg.No(s=10), sg.Button('Maybe', s=10)]], disable_close=True, ).read(close=True) sg.popup('Your choice was', choice)
结果如下。
▍12、实战 最后来个综合实战案例,将某个文件夹下所有的Excel文件中的sheet表,一一保存为单独的Excel文件。 代码如下,需要安装xlwings库,其中pathlib库是内置的。 from pathlib import Path import PySimpleGUI as sg import xlwings as xw
# 选择输入文件夹 INPUT_DIR = sg.popup_get_folder('Select an input folder') if not INPUT_DIR: sg.popup('Cancel', 'No folder selected') raise SystemExit('Cancelling: no folder selected') else: INPUT_DIR = Path(INPUT_DIR)
# 选择输出文件夹 OUTPUT_DIR = sg.popup_get_folder('Select an output folder') if not OUTPUT_DIR: sg.popup('Cancel', 'No folder selected') raise SystemExit('Cancelling: no folder selected') else: OUTPUT_DIR = Path(OUTPUT_DIR)
# 获取输入文件夹中所有xls格式文件的路径列表 files = list(INPUT_DIR.rglob('*.xls*'))
with xw.App(visible=False) as app: for index, file in enumerate(files): # 显示进度 sg.one_line_progress_meter('Current Progress', index + 1, len(files)) wb = app.books.open(file) # 提取sheet表为单独的Excel表格 for sheet in wb.sheets: wb_new = app.books.add() sheet.copy(after=wb_new.sheets[0]) wb_new.sheets[0].delete() wb_new.save(OUTPUT_DIR / f'{file.stem}_{sheet.name}.xlsx') wb_new.close()
sg.popup_ok('Task done!')
首先选择输入文件夹和输出文件夹的地址。 然后通过pathlib库对输入文件夹进行遍历,查找出所有xls格式文件的路径地址。 
点击OK按钮后,就会开始表格转换,操作如下。 使用了one_line_progress_meter()方法显示程序处理的进度。 20表示有20次循环,原始Excel文件总计有20个,需要处理20次,其他的都在上图中标示出来咯。 好了,今天的分享就到这里了,有兴趣的小伙伴可以自行去学习。
|