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')

輸出 - 上述程式碼生成的彈出視窗如下所示:

Popup Windows

以下輸出顯示在 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))

它將產生以下輸出

Scrolled Popup

進度計

“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'
   )

它將產生以下輸出視窗:

Progress Meter

除錯彈出視窗

在程式執行期間,通常需要跟蹤某些變數的中間值,儘管在以下輸出中不需要。這可以透過 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,則除錯視窗將顯示以下輸出

Debug Window
廣告
© . All rights reserved.