教你用一行Python代码实现GUI图形界面
作者:Python无霸哥 发布时间:2021-10-15 01:38:30
一、选择文件夹
首先导入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按钮,会直接提示没有选取文件夹。
二、选择文件
选择文件操作和上面选择文件夹的有点相似。
# 窗口显示文本框和浏览按钮, 以便选择文件
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)
不同的是,选择文件可以设置multiple_files(是否为多个文件)和file_types(文件类型)参数。
示例如下
选择了多个Excel文件,最终结果返回了所有文件的路径地址。
三、选择日期
使用popup_get_date()方法,显示一个日历窗口。
# 窗口显示文本框和浏览按钮, 以便选择文件
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)
示例如下
选择好日期后,点击OK按钮,即可返回日期元组结果。
四、输入文本
使用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按钮,会提示没有文本输入。
五、弹窗无按钮
# 显示一个弹窗, 但没有任何按钮
sg.popup_no_buttons("You cannot click any buttons")
结果如下
六、弹窗无标题
# 显示一个没有标题栏的弹窗
sg.popup_no_titlebar("A very simple popup")
结果如下
七、弹窗只有OK按钮
# 显示弹窗且只有OK按钮
sg.popup_ok("You can only click on 'OK'")
结果如下
八、弹窗只有Error按钮(红色)
# 显示弹窗且只有error按钮, 按钮带颜色
sg.popup_error("Something went wrong")
结果如下
九、显示通知窗口
# 显示一个“通知窗口”, 通常在屏幕的右下角, 窗口会慢慢淡入淡出
sg.popup_notify("Task done!")
结果如下, Task done提示信息淡入淡出。
十、弹窗选择
# 显示弹窗以及是和否按钮, 选择判断
answer = sg.popup_yes_no("Do you like this video?")
sg.popup("You have selected", answer)
结果如下
十一、自定义弹窗
上面那些弹窗都是库自带的,如果想自定义创建,可以参考下面的方法。
# 自定义创建弹窗, 一行代码完成
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)
结果如下
实战
最后来个综合实战案例,将某个文件夹下所有的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次,其他的都在上图中标示出来咯。
来源:https://blog.csdn.net/weixin_45841831/article/details/128504896


猜你喜欢
- 本文实例为大家分享了python实现nao机器人身体躯干和腿部动作的具体代码,供大家参考,具体内容如下跟上一篇类似,代码没什么难度,可以进行
- var a= new Array(new Array(1,2),new Array('b','c')); d
- 在《javascript设计模式》中对这种方法作了比较详细的描述,实现方法的链式调用,只须让在原型中定义的方法都返回调用这些方法的实例对象的
- 本文实例讲述了Laravel框架实现定时发布任务的方法。分享给大家供大家参考,具体如下:背景:需要每隔一小时新建一个任务http://lar
- 1.什么是Proxy?它的作用是?据阮一峰文章介绍:Proxy可以理解成,在目标对象之前架设一层 "拦截",当外界对该对
- 方法一:#-*- coding:utf-8 -*-from sqlalchemy import create_engineclass mys
- 注:使用这个脚本需要安装scapy 包最好在linux平台下使用,因为scapy包在windows上安装老是会有各种问题#coding:ut
- 利用Chrome或Firefox保存的Har文件http/https请求,可用于遍历字典提交From表单.少说废话直接上代码Github地址
- 如下所示:import http.client, urllib.parseimport http.client, urllib.parsei
- phpMyAdmin错误 缺少 mysqli 扩展。请检查 PHP 配置 的解决方案phpMyAdmin 缺少 mysqli 扩展。请检查
- 在网上看过很多版本的PHP异步请求方法,这里简单总结几个常用方法分享给大家 1、用CURL实现一步请求 CURL扩展是我们在开发过程中最常用
- 有时候我们会截取字符串中的一些特殊想要的东西,大小写字母、模号、汉字、数字等等,今天先介绍一个获取字符串中小写字母(也是大写字母)的方式,直
- 块级元素块级元素生成一个元素框,(默认地)它会填充其父级元素的内容,旁边不能有其他元素。换句话说,他在元素框之前和之后生成了“分隔”符。我们
- 1.random库的使用:random库是使用随机数的Python标准库从概率论角度来说,随机数是随机产生的数据(比如抛硬币),但时计算机是
- 前言这几天看《流畅的python》这本书了,在一个示例中又看到了property作为装饰器在使用,因为很久没有用这个东西了,对它
- 在用python画散点图的时候想标记出特定的点,比如在某些点的外围加个空心圆,一样可以通过plt.scatter实现import matpl
- 场景:按照github文档上启动一个flask的app,默认是用5000端口,如果5000端口被占用,启动失败。样例代码:from flas
- 您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ?我们先抛开 g
- 本文实例讲述了Python3实现的爬虫爬取数据并存入mysql数据库操作。分享给大家供大家参考,具体如下:爬一个电脑客户端的订单。罗总推荐,
- eval函数就是实现list、dict、tuple与str之间的转化str函数把list,dict,tuple转为为字符串一、字符串转换成列