如何只用一行Python代碼制作一個(gè)GUI(圖形界面)?
GUI(圖形用戶界面),顧名思義就是用圖形的方式,來(lái)顯示計(jì)算機(jī)操作的界面,更加方便且直觀。
一個(gè)好看又好用的GUI,可以大大提高大家的使用體驗(yàn),提高效率。
比如你想開發(fā)一個(gè)計(jì)算器,如果只是一個(gè)程序輸入,輸出窗口的話,是沒有用戶體驗(yàn)的。
所以開發(fā)一個(gè)圖形化的小窗口,就變得很有必要。
今天,小F就給大家介紹如何只用一行Python代碼制作一個(gè)GUI。
主要使用Python的PySimpleGUI庫(kù)來(lái)完成這個(gè)工作。
#?安裝PySimpleGUI
pip?install?PySimpleGUI?-i?https://mirror.baidu.com/pypi/simple
詳細(xì)的接口文檔地址如下。
https://pysimplegui.readthedocs.io/en/latest/call%20reference/
▍1、選擇文件夾
首先導(dǎo)入PySimpleGUI庫(kù),并且用縮寫sg來(lái)表示。
import?PySimpleGUI?as?sg
#?窗口顯示文本框和瀏覽按鈕,?以便選擇一個(gè)文件夾
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()方法,一行代碼就能實(shí)現(xiàn)選擇文件夾的操作。
示例如下。

點(diǎn)擊Browse按鈕,選擇文件夾,文本框就會(huì)顯示出文件夾的絕對(duì)路徑。
點(diǎn)擊OK按鈕,顯示最終選擇的路徑信息,再次點(diǎn)擊OK按鈕,結(jié)束窗口。

如果沒有選擇文件夾,而是直接點(diǎn)擊OK按鈕,會(huì)直接提示沒有選取文件夾。
▍2、選擇文件
選擇文件操作和上面選擇文件夾的有點(diǎn)相似。
不同的是,選擇文件可以設(shè)置multiple_files(是否為多個(gè)文件)和file_types(文件類型)參數(shù)。
#?窗口顯示文本框和瀏覽按鈕,?以便選擇文件
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)
示例如下。

選擇了多個(gè)Excel文件,最終結(jié)果返回了所有文件的路徑地址。
▍3、選擇日期
使用popup_get_date()方法,顯示一個(gè)日歷窗口。
#?顯示一個(gè)日歷窗口,?通過用戶的選擇,?返回一個(gè)元組(月,?日,?年)
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)
示例如下。

選擇好日期后,點(diǎn)擊OK按鈕,即可返回日期元組結(jié)果。
▍4、輸入文本
使用popup_get_text()方法,顯示一個(gè)文本輸入框。
#?顯示文本輸入框,?輸入文本信息,?返回輸入的文本,?如果取消則返回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)
鍵入信息,示例如下。

點(diǎn)擊OK按鈕,返回輸入的文本信息。
如果沒有輸入,直接點(diǎn)擊OK按鈕,會(huì)提示沒有文本輸入。
▍5、彈窗無(wú)按鈕
#?顯示一個(gè)彈窗,?但沒有任何按鈕
sg.popup_no_buttons("You?cannot?click?any?buttons")
結(jié)果如下。

▍6、彈窗無(wú)標(biāo)題
#?顯示一個(gè)沒有標(biāo)題欄的彈窗
sg.popup_no_titlebar("A?very?simple?popup")
結(jié)果如下。

▍7、彈窗只有OK按鈕
#?顯示彈窗且只有OK按鈕
sg.popup_ok("You?can?only?click?on?'OK'")
結(jié)果如下。

▍8、彈窗只有Error按鈕(紅色)
#?顯示彈窗且只有error按鈕,?按鈕帶顏色
sg.popup_error("Something?went?wrong")
結(jié)果如下。

▍9、顯示通知窗口
#?顯示一個(gè)“通知窗口”,?通常在屏幕的右下角,?窗口會(huì)慢慢淡入淡出
sg.popup_notify("Task?done!")
結(jié)果如下, Task done提示信息淡入淡出。

▍10、彈窗選擇
#?顯示彈窗以及是和否按鈕,?選擇判斷
answer?=?sg.popup_yes_no("Do?you?like?this?video?")
sg.popup("You?have?selected",?answer)
結(jié)果如下。

▍11、自定義彈窗
上面那些彈窗都是庫(kù)自帶的,如果想自定義創(chuàng)建,可以參考下面的方法。
#?自定義創(chuàng)建彈窗,?一行代碼完成
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)
結(jié)果如下。

▍12、實(shí)戰(zhàn)
最后來(lái)個(gè)綜合實(shí)戰(zhàn)案例,將某個(gè)文件夾下所有的Excel文件中的sheet表,一一保存為單獨(dú)的Excel文件。
代碼如下,需要安裝xlwings庫(kù),其中pathlib庫(kù)是內(nèi)置的。
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):
????????#?顯示進(jìn)度
????????sg.one_line_progress_meter("Current?Progress",?index?+?1,?len(files))
????????wb?=?app.books.open(file)
????????#?提取sheet表為單獨(dú)的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庫(kù)對(duì)輸入文件夾進(jìn)行遍歷,查找出所有xls格式文件的路徑地址。

點(diǎn)擊OK按鈕后,就會(huì)開始表格轉(zhuǎn)換,操作如下。

使用了one_line_progress_meter()方法顯示程序處理的進(jìn)度。

20表示有20次循環(huán),原始Excel文件總計(jì)有20個(gè),需要處理20次,其他的都在上圖中標(biāo)示出來(lái)咯。
好了,今天的分享就到這里了,有興趣的小伙伴可以自行去學(xué)習(xí)。
對(duì)比Excel系列圖書累積銷量達(dá)15w冊(cè),讓你輕松掌握數(shù)據(jù)分析技能,可以在全網(wǎng)搜索書名進(jìn)行了解選購(gòu):

