- PySimpleGUI 教程
- PySimpleGUI - 首頁
- PySimpleGUI - 簡介
- PySimpleGUI - 環境設定
- PySimpleGUI - Hello World
- PySimpleGUI - 彈出視窗
- PySimpleGUI - 視窗類
- PySimpleGUI - 元素類
- PySimpleGUI - 事件
- PySimpleGUI - 選單欄
- PySimpleGUI - Matplotlib 整合
- PySimpleGUI - 使用 PIL
- PySimpleGUI - 偵錯程式
- PySimpleGUI - 設定
- PySimpleGUI 有用資源
- PySimpleGUI - 快速指南
- PySimpleGUI - 有用資源
- PySimpleGUI - 討論
PySimpleGUI - 彈出視窗
PySimpleGUI 模組中以 `popup*` 為字首的函式會生成具有預定義外觀的視窗。彈出函式的名稱指示其用途和其上存在的按鈕的配置。這些彈出視窗只需一行程式碼即可建立。每個彈出視窗都有其特定的用途,並在使用後立即關閉。
最基本的彈出視窗由 `popup()` 函式建立。它可以像 `print()` 函式一樣使用,用於在視窗上顯示多個引數和一個“確定”按鈕。它就像一個訊息框,按下“確定”按鈕後立即消失。
>>> import PySimpleGUI as psg
>>> psg.popup("Hello World")
它顯示一個帶有“Hello World”文字和“確定”按鈕的彈出視窗。請注意,可以顯示多個字串。以下是一些具有不同按鈕配置的彈出視窗:
popup_ok - 只顯示帶有“確定”按鈕的彈出視窗
popup_ok_cancel - 顯示帶有“確定”和“取消”按鈕的彈出視窗
popup_cancel - 顯示帶有“取消”按鈕文字的彈出視窗
popup_yes_no - 顯示帶有“是”和“否”按鈕的彈出視窗
popup_error - 帶有彩色按鈕且按鈕文字為“錯誤”的彈出視窗
這些函式返回使用者按下的按鈕的文字。例如,如果使用者按下確定取消彈出視窗的“確定”按鈕,則它返回“確定”,這可以在進一步的程式設計邏輯中使用。
以下彈出視窗接受使用者以文字形式輸入的內容,或允許使用者從選擇器中選擇檔案/資料夾/日期。
popup_get_text - 顯示帶有文字輸入欄位的彈出視窗。返回輸入的文字,如果關閉/取消則返回 None
popup_get_file - 顯示帶有文字輸入欄位和瀏覽按鈕的彈出視窗,以便使用者可以選擇檔案。
popup_get_folder - 顯示帶有文字輸入欄位和瀏覽按鈕的彈出視窗,以便使用者可以選擇資料夾。
popup_get_date - 顯示一個日曆視窗,獲取使用者的選擇,並返回一個元組 (月, 日, 年)
當用戶做出選擇並按下“確定”按鈕時,彈出的返回值就是文字,可以在程式中進一步使用。
以下指令碼顯示了上述一些彈出的使用方法:
import PySimpleGUI as psg
text = psg.popup_get_text('Enter your name', title="Textbox")
print ("You entered: ", text)
file=psg.popup_get_file('Select a file', title="File selector")
print ("File selected", file)
folder=psg.popup_get_folder('Get folder', title="Folder selector")
print ("Folder selected",folder)
ch = psg.popup_yes_no("Do you want to Continue?", title="YesNo")
print ("You clicked", ch)
ch = psg.popup_ok_cancel("Press Ok to proceed", "Press cancel to stop", title="OkCancel")
if ch=="OK":
print ("You pressed OK")
if ch=="Cancel":
print ("You pressed Cancel")
psg.popup_no_buttons('You pressed', ch, non_blocking=True)
psg.popup_auto_close('This window will Autoclose')
輸出 - 上述程式碼生成的彈出視窗如下所示:
以下輸出顯示在 Python 控制檯上:
You entered: Tutorialspoint File selected F:/python36/hello.png Folder selected F:/python36/Scripts You clicked Yes You pressed Cancel
所有型別的彈出視窗都是從彈出視窗類繼承的相應類的物件。它們都具有一組通用的屬性。這些屬性具有特定的預設值,可用於自定義彈出視窗物件的外觀和行為。下表列出了公共引數:
| 型別 | 引數 | 描述 |
|---|---|---|
| 任意 | *args | 要在彈出視窗上顯示的值 |
| 字串 | title | 視窗的可選標題。 |
| (字串, 字串) 或 None | button_color | 顯示的按鈕的顏色 (文字顏色, 按鈕顏色) |
| 字串 | background_color | 視窗的背景顏色 |
| 字串 | text_color | 文字顏色 |
| 布林值 | auto_close | 如果為 True,則視窗將自動關閉 |
| 整數 | auto_close_duration | 以秒為單位的時間,在自動關閉視窗之前保持視窗開啟 |
| 布林值 | non_blocking | 如果為 True,則將立即從函式返回,而無需等待使用者的輸入。 |
| 元組[字型名稱, 大小, 修飾符] | font | 指定字體系列、大小等。元組或單字串格式 '名稱 大小 風格' |
| 布林值 | grab_anywhere | 如果為 True,則可以在任何地方抓取以移動視窗。 |
| (整數, 整數) | Location | 螢幕上顯示視窗左上角的位置。預設為視窗居中顯示在螢幕上 |
| 布林值 | keep_on_top | 如果為 True,則視窗將始終位於所有當前視窗之上 |
| 布林值 | modal | 如果為 True,則彈出視窗將表現為模態視窗。預設值為 True |
可滾動彈出視窗
popup_scrolled() 函式會生成一個帶有可滾動文字框的彈出視窗。使用此功能可以顯示大量的文字,這些文字由許多行組成,字元數超過寬度。
size 屬性是一個元組 (w, h),其中 "w" 是單行中的字元數,"h" 是一次顯示的行數。如果文字的字元數/行數超過 "w" 或 "h",則文字框的水平/垂直捲軸將變為活動狀態。
在下面的示例中,一個大型檔案 zen.txt 將顯示在一個帶有可滾動文字框的彈出視窗中。該檔案包含 Python 的設計原則,稱為“Python 之禪”。
import PySimpleGUI as psg
file=open("zen.txt")
text=file.read()
psg.popup_scrolled(text, title="Scrolled Popup", font=("Arial Bold", 16), size=(50,10))
它將產生以下輸出:
進度計
“one_line_progress_meter”是一個彈出視窗,它顯示正在進行的長時間程序(例如迴圈)的視覺化表示。它顯示某個引數的瞬時值、完成程序的估計時間和經過的時間。
在下面的示例中,逐個字元讀取文字檔案。進度計以進度條、估計完成所需時間和計數的瞬時值的形式顯示程序的進度。
import PySimpleGUI as psg
import os
size = os.path.getsize('zen.txt')
file=open("zen.txt")
i=0
while True:
text=file.read(1)
i=i+1
if text=="":
file.close()
break
print (text,end='')
psg.one_line_progress_meter(
'Progress Meter', i, size,
'Character Counter'
)
它將產生以下輸出視窗:
除錯彈出視窗
在程式執行期間,通常需要跟蹤某些變數的中間值,儘管在以下輸出中不需要。這可以透過 PySimpleGUI 庫中的 `Print()` 函式實現。
注意 - 與 Python 的內建 `print()` 函式不同,此函式中的“P”是大寫的。
當程式第一次遇到此函式時,除錯視窗將出現,所有後續的 Print 將在此視窗中顯示。此外,我們還可以使用 `EasyPrint` 或 `eprint`,它們具有相同的效果。
以下程式計算使用者輸入數字的階乘值。在 for 迴圈中,我們希望跟蹤每次迭代中 f(階乘)的值。這是透過 Print 函式完成的,並在除錯視窗中顯示。
import PySimpleGUI as psg
f=1
num=int(psg.popup_get_text("enter a number: "))
for x in range(1, num+1):
f=f*x
psg.Print (f,x)
print ("factorial of {} = {}".format(x,f))
假設使用者輸入 5,則除錯視窗將顯示以下輸出: