社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何只用一行Python代码制作一个GUI(图形界面)?

Crossin的编程教室 • 1 年前 • 217 次点击  

入门教程、案例源码、学习资料、读者群

请访问: python666.cn


大家好,欢迎来到 Crossin的编程教室 !


GUI(图形用户界面),顾名思义就是用图形的方式,来显示计算机操作的界面,更加方便且直观。


一个好看又好用的GUI,可以大大提高大家的使用体验,提高效率。


比如你想开发一个计算器,如果只是一个程序输入,输出窗口的话,是没有用户体验的。


所以开发一个图形化的小窗口,就变得很有必要。


今天就给大家介绍如何只用一行Python代码制作一个GUI


主要使用Python的PySimpleGUI库来完成这个工作。


# 安装PySimpleGUI
pip install PySimpleGUI -i https://mirror.baidu.com/pypi/simple


详细的接口文档地址如下。

https://pysimplegui.readthedocs.io/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=Falseas 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://pan.baidu.com/s/1kTXqQza7t4Cyzj33Mx3-ZA 

提取码:vc7d

如果在过程中有疑问,欢迎到本文作者的公众号「法纳斯特」交流讨论。


作者:小F

来源:法纳斯特



Crossin的新书码上行动:零基础学会PYTHON编程(CHATGPT版)已经上市了

本书力求做到浅显易懂,让完全没有编程经验的零基础“小白”也能学会Python。内容从环境搭建这种最基础的步骤开始讲起,逐渐深入到常见的实际应用当中。在讲解知识点的同时配有相应的代码示例,让读者可以边学边练加深理解。书中还创新地使用 ChatGPT 作为编程学习的辅助,带领读者探索AI时代下学习编程的新模式。


公众号的读者朋友们购买后可在 后台联系我,加入读者交流群,Crossin会为你开启陪读模式,解答你在阅读本书时的一切疑问。

感谢转发点赞的各位~


_往期文章推荐_

神奇的「小黄鸭调试法」




如需了解付费精品课程教学答疑服务
请在Crossin的编程教室内回复: 666

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/157428
 
217 次点击