首頁 > 軟體

教你如何用一行Python程式碼實現GUI圖形介面

2022-05-18 16:01:35

GUI(圖形化使用者介面),顧名思義就是用圖形的方式,來顯示計算機操作的介面,更加方便且直觀。

一個好看又好用的GUI,可以大大提高大家的使用體驗,提高效率。

比如你想開發一個計算器,如果只是一個程式輸入,輸出視窗的話,是沒有使用者體驗的。

所以開發一個圖形化的小視窗,就變得很有必要。

今天,小F就給大家介紹如何只用一行Python程式碼製作一個GUI。

主要使用Python的PySimpleGUI庫來完成這個工作。

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

詳細的介面檔案地址

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、選擇檔案

選擇檔案操作和上面選擇資料夾的有點相似。

# 視窗顯示文字方塊和瀏覽按鈕, 以便選擇檔案
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檔案,最終結果返回了所有檔案的路徑地址。

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次,其他的都在上圖中標示出來咯。

以上就是教你如何用一行Python程式碼實現GUI圖形介面的詳細內容,更多關於PythonGUI圖形介面的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com