- PySimpleGUI 教程
- PySimpleGUI - 首頁
- PySimpleGUI - 簡介
- PySimpleGUI - 環境設定
- PySimpleGUI - Hello World
- PySimpleGUI - 彈出視窗
- PySimpleGUI - 視窗類
- PySimpleGUI - 元素類
- PySimpleGUI - 事件
- PySimpleGUI - 選單欄
- PySimpleGUI - Matplotlib 整合
- PySimpleGUI - 使用 PIL
- PySimpleGUI - 偵錯程式
- PySimpleGUI - 設定
- PySimpleGUI 有用資源
- PySimpleGUI - 快速指南
- PySimpleGUI - 有用資源
- PySimpleGUI - 討論
PySimpleGUI - 按鈕元素
幾乎每個 GUI 視窗至少都包含一個按鈕。當點選按鈕元素時,會啟動某個操作。PySimpleGUI 有一些具有預定義標題的按鈕型別。它們被定義為執行特定任務。其他具有使用者定義標題的按鈕能夠執行任何所需的
具有預定義標題的按鈕具有快捷名稱。因此,可以使用兩種方式建立標題為 OK 的按鈕:
>>> b1=psg.Button("OK")
# OR
>>> b1=psg.OK()
其他此類預定義標題為:
OK
Ok
提交
取消
是
否
退出
退出
幫助
儲存
另存為
開啟
在 PySimpleGUI 中,按鈕事件預設情況下自動啟用。當單擊時,這些預定義標題將成為生成的事件的名稱。
PysimpleGUI 中有一些選擇器按鈕。單擊這些按鈕時,會開啟一個對話方塊,允許使用者從中進行選擇。
檔案瀏覽
檔案瀏覽
檔案另存為
資料夾瀏覽
日曆按鈕
顏色選擇器按鈕
這些特殊按鈕返回所選物件的字串表示形式,並將該值填充到視窗上的任何其他元素(例如 Input 或 Multiline)中。此元素由 target 屬性指向。
target 屬性的值使用 (行,列) 元組表示。預設目標是同一行中此按鈕左側的元素,表示為 (ThisRow, -1) 值。ThisRow 表示同一行,“-1”表示按鈕左側的元素。如果 target 的值為 (None, None),則按鈕本身將儲存資訊。該值可以透過使用按鈕的鍵來訪問。
target 屬性也可以是目標元素的 key 屬性。
檔案瀏覽
FileBrowse 按鈕開啟一個檔案對話方塊,從中可以選擇單個檔案。在以下程式碼中,所選檔案的路徑字串顯示在同一行中的目標 Input 框中。
import PySimpleGUI as psg
layout = [
[psg.Text('Select a file',font=('Arial Bold', 20), expand_x=True, justification='center')],
[psg.Input(enable_events=True, key='-IN-',font=('Arial Bold', 12),expand_x=True), psg.FileBrowse()]
]
window = psg.Window('FileChooser Demo', layout,
size=(715,100))
while True:
event, values = window.read()
if event == psg.WIN_CLOSED or event == 'Exit':
break
window.close()
此程式碼呈現以下視窗:
單擊“瀏覽”按鈕以顯示**檔案對話方塊**:
所選檔名及其路徑顯示在 Input 框中。
檔案瀏覽
此元素允許使用者選擇多個檔案。返回的字串是檔案的串聯,以“;”字元分隔。我們將使用以下程式碼填充列表框中的所選檔案。
import PySimpleGUI as psg
layout = [[psg.Text('Select a file', font=('Arial Bold', 20), expand_x=True, justification='center')],
[psg.LBox([], size=(20, 10), expand_x=True,
expand_y=True, key='-LIST-'),
psg.Input(visible=False, enable_events=True, key='-IN-', font=('Arial Bold', 10), expand_x=True), psg.FilesBrowse()]
]
window = psg.Window('FileChooser Demo', layout, size=(715, 200))
while True:
event, values = window.read()
if event == '-IN-':
window['-LIST-'].Update(values['-IN-'].split(';'))
if event == psg.WIN_CLOSED or event == 'Exit':
break
window.close()
這裡,鍵為“-IN-”的 Input 元素透過將“visible”屬性設定為 False 而隱藏。儘管如此,它仍然包含以“;”分隔的所選檔案列表。該字串在“;”字元出現的地方被拆分,下面的列表包含檔名。
資料夾瀏覽
此元素的工作原理類似於**FileBrowse** 元素。它用於選擇當前資料夾。它可用於將所選資料夾設定為後續檔案相關操作的預設資料夾。
您可以將此元素的“initial_folder”屬性設定為資料夾名稱(及其路徑),以開啟帶有該資料夾的資料夾對話方塊,並從該資料夾開始。
import PySimpleGUI as psg
layout = [
[psg.Text('Select a folder', font=('Arial Bold', 20),
expand_x=True, justification='center')],
[psg.Input(enable_events=True, key='-IN-',
font=('Arial Bold', 12), expand_x=True),
psg.FolderBrowse(initial_folder="c:/Python310")]
]
window = psg.Window('FolderChooser Demo', layout, size=(715,100))
while True:
event, values = window.read()
if event == psg.WIN_CLOSED or event == 'Exit':
break
window.close()
顯示帶有“瀏覽”按鈕的視窗。
單擊時會開啟**資料夾對話方塊**。
所選資料夾的路徑顯示在 Input 文字欄位中。
檔案另存為
此按鈕也開啟一個檔案對話方塊,但提供了一個“儲存”按鈕,以便可以透過使用者給定的名稱儲存 PySimpleGUI 視窗上的資訊。SaveAs 對話方塊可以透過以下屬性自定義。我們可以對要選擇的
| 序號 | 屬性和描述 |
|---|---|
| 1 | file_types 預設值 = (("所有檔案", "*.* *"),) |
| 2 | default_extension 如果使用者未輸入副檔名,則將其新增到檔名 |
| 3 | initial_folder 資料夾和檔案的起始路徑 |
在下面的示例中,FileBrowse 按鈕允許您讀取檔案的內容並在 Multiline 文字框中顯示。單擊“另存為”按鈕以將顯示的文字另存為新的檔名。
import PySimpleGUI as psg
t1 = psg.Input(visible=False, enable_events=True, key='-T1-', font=('Arial Bold', 10), expand_x=True)
t2 = psg.Input(visible=False, enable_events=True, key='-T2-', font=('Arial Bold', 10), expand_x=True)
t3 = psg.Multiline("", enable_events=True, key='-INPUT-',
expand_x=True, expand_y=True, justification='left')
layout = [[t1, psg.FilesBrowse()], [t3], [t2, psg.FileSaveAs()]]
window = psg.Window('FileSaveAs Demo', layout, size=(715, 200))
while True:
event, values = window.read()
if event == '-T1-':
file = open(t1.get())
txt = file.read()
window['-INPUT-'].Update(value=txt)
if event == '-T2-':
file = open(t2.get(), "w")
file.write(t3.get())
file.close()
if event == psg.WIN_CLOSED or event == 'Exit':
break
window.close()
選擇一個文字檔案。其內容將顯示在文字框中。
選擇名稱和目標資料夾以將文字儲存到新檔案中。
顏色選擇器按鈕
此按鈕會彈出一個顏色對話方塊。您可以從色板中選擇顏色,或使用滑塊,或從微調器中設定 RGB 值。對話方塊返回所選顏色的 RGB 值的十六進位制字串。它顯示在目標輸入控制元件中,並且可以進一步
在以下示例中,所選顏色用於更新顯示“Hello World”字串的 Text 元素的“text_color”屬性。
import PySimpleGUI as psg
layout = [[psg.Text('Hello World', font=('Arial Bold', 20),
expand_x=True, justification='center',
key='-T1-')],
[psg.Input(enable_events=True, key='-IN-',
font=('Arial Bold', 12), expand_x=True),
psg.ColorChooserButton("Choose Color")]
]
window = psg.Window('Color Chooser Demo', layout, size=(715, 100))
while True:
event, values = window.read()
print(event, values)
if event == '-IN-':
window['-T1-'].update(text_color=values['-IN-'])
if event == psg.WIN_CLOSED or event == 'Exit':
break
window.close()
出現一個帶有“選擇顏色”標題的 ColorChooserButton 視窗。
單擊按鈕以開啟顏色對話方塊。
選擇所需的顏色並按“確定”。將返回與之對應的十六進位制字串,並在目標 Input 元素中顯示。Input 元素的**get()**方法用於獲取它並更新“Hello World”文字的**text_color**屬性。
日曆按鈕
此按鈕顯示一個日曆選擇器視窗。目標元素填充返回值作為字串。CalendarButton 類中定義了以下重要屬性:
| 序號 | 屬性和描述 |
|---|---|
| 1 | button_text 按鈕中的文字 |
| 2 | default_date_m_d_y 顯示的開始日期 |
| 3 | locale 定義用於獲取星期幾名稱的區域設定 |
| 4 | month_names 要使用的月份名稱的可選列表(應為 12 個專案) |
| 5 | day_abbreviations 顯示為星期的縮寫列表(可選) |
| 6 | title 日期選擇器視窗中顯示的標題 |
這是一個演示如何使用 CalendarButton 的簡單示例:
它最初顯示一個日曆按鈕。單擊它以開啟日曆對話方塊:
使用選擇器箭頭選擇所需的日期。它將顯示在視窗中。
影像按鈕
可以使用影像代替文字標題顯示在按鈕的表面上。button 類具有“image_filename”屬性。分配要顯示的影像的名稱。影像應為 PNG 或 GIF 型別。
Button 物件的“image_filename”屬性可以設定為要在按鈕上顯示的影像檔案。
在以下示例中,新增、減去和退出按鈕使用影像而不是標題。要捕獲它們的單擊事件,將使用它們的 key 引數。
import PySimpleGUI as psg
layout = [
[psg.Text('Enter a num: '), psg.Input(key='-FIRST-')],
[psg.Text('Enter a num: '), psg.Input(key='-SECOND-')],
[psg.Text('Result : '), psg.Text(key='-OUT-')],
[psg.Button(key="Add", image_filename="plus.png"),
psg.Button(key="Sub", image_filename="minus.png"),
psg.Button(key="Exit", image_filename="close.png")],
]
window = psg.Window('Calculator', layout, size=(715, 200), enable_close_attempted_event=True)
while True:
event, values = window.read()
print(event, values)
if event == "Add":
result = int(values['-FIRST-']) + int(values['-SECOND-'])
if event == "Sub":
result = int(values['-FIRST-']) - int(values['-SECOND-'])
window['-OUT-'].update(result)
if event == psg.WIN_CLOSED or event == 'Exit':
break
window.close()
以下是上述程式碼的**結果**: