- PySimpleGUI 教程
- PySimpleGUI - 首頁
- PySimpleGUI - 簡介
- PySimpleGUI - 環境設定
- PySimpleGUI - Hello World
- PySimpleGUI - 彈出視窗
- PySimpleGUI - 視窗類
- PySimpleGUI - 元素類
- PySimpleGUI - 事件
- PySimpleGUI - 選單欄
- PySimpleGUI - Matplotlib 整合
- PySimpleGUI - 使用 PIL
- PySimpleGUI - 偵錯程式
- PySimpleGUI - 設定
- PySimpleGUI 有用資源
- PySimpleGUI - 快速指南
- PySimpleGUI - 有用資源
- PySimpleGUI - 討論
PySimpleGUI - 輸入元素
這種部件在任何 GUI 工具包中都非常流行。輸入元素基於 Tkinter 中的 Entry 部件。此類的物件提供單行文字輸入欄位。
除了常用屬性外,Input 元素特有的屬性如下:
| 序號 | 屬性及描述 |
|---|---|
| 1 | default_text 最初顯示在輸入框中的文字,作為預設值 |
| 2 | disabled 設定元素的停用狀態 |
| 3 | use_readonly_for_disable 如果為 True(預設值),則 tkinter 狀態設定為“只讀”。否則狀態設定為“停用” |
| 4 | password_char 如果這是一個密碼欄位,則為密碼字元 |
Input 類定義了 **get()** 方法,該方法返回使用者輸入的文字。**update()** 方法更改 Input 元素的某些設定。定義了以下屬性:
| 序號 | 屬性及描述 |
|---|---|
| 1 | value 在輸入欄位中顯示為預設文字的新文字 |
| 2 | disabled 元素的停用或啟用狀態 |
| 3 | select 如果為 True,則文字將被選中 |
| 4 | visible 更改元素的可見性 |
| 5 | move_cursor_to 將游標移動到特定偏移量。預設為“end” |
| 6 | password_char 如果這是一個密碼欄位,則為密碼字元 |
| 7 | paste 如果為 True,則將值“貼上”到元素中,而不是替換整個元素。如果任何內容被選中,則會被替換。文字將插入到當前游標位置。 |
在下面的示例中,視窗包含一個 Input 元素來接受使用者輸入。它被程式設計為僅接受數字。如果按下任何非數字鍵,則會彈出一個訊息,告知不允許這樣做。為此,將 Input 的最後一個字元與由數字字元組成的字串進行比較。如果按下的最後一個鍵不是數字,則將其從 Input 框中刪除。
import PySimpleGUI as psg
l1 = psg.Text('Type here', key='-OUT-', font=('Arial Bold', 20), expand_x=True, justification='center')
t1 = psg.Input('', enable_events=True, key='-INPUT-', font=('Arial Bold', 20), expand_x=True, justification='left')
b1 = psg.Button('Ok', key='-OK-', font=('Arial Bold', 20))
b2 = psg.Button('Exit', font=('Arial Bold', 20))
layout = [[l1], [t1], [b1, b2]]
window = psg.Window('Input Demo', layout, size=(750, 150))
while True:
event, values = window.read()
print(event, values)
if event == '-INPUT-':
if values['-INPUT-'][-1] not in ('0123456789'):
psg.popup("Only digits allowed")
window['-INPUT-'].update(values['-INPUT-'][:-1])
if event == psg.WIN_CLOSED or event == 'Exit':
break
window.close()
它將生成以下 **輸出** 視窗:
多行元素
如果要輸入包含多行的文字,可以使用 Multiline 元素代替 Input 元素。實際上,它既用作輸入元素也用作輸出元素。如果輸入/顯示文字的長度超過輸入/顯示文字的高度/寬度,則元素將出現捲軸。
以下屬性特定於 Multiline 元素:
| 序號 | 屬性及描述 |
|---|---|
| 1 | default_text 顯示的初始文字 |
| 2 | autoscroll 如果為 True,則元素的內容將在更多資料新增到末尾時自動滾動 |
| 3 | auto_size_text 如果為 True(預設值),則 tkinter 狀態設定為“只讀”。否則狀態設定為“停用” |
| 4 | horizontal_scroll 控制是否應顯示水平捲軸。如果為 True,則除了垂直捲軸外,還將顯示水平捲軸 |
| 5 | reroute_stdout 如果為 True,則所有輸出到 stdout 的內容都將輸出到此元素 |
| 6 | reroute_cprint 如果為 True,則您的 cprint 呼叫將輸出到此元素。 |
| 7 | no_scrollbar 如果為 False,則將顯示垂直捲軸(預設值) |
與 Input 元素一樣,Multiline 類也有一個 **get()** 方法來檢索其文字內容。**Update()** 方法更改此元素某些屬性的值。例如:
**value** - 要顯示的新文字
**append** - 如果為 True,則新值將新增到當前值的末尾。如果為 False,則內容將被替換。
在以下示例中,使用 Multiline 文字框顯示文字檔案的內容:
import PySimpleGUI as psg
file = open("zen.txt")
text = file.read()
l1 = psg.Text('Multiline Input/Output', font=('Arial Bold', 20), expand_x=True, justification='center')
t1 = psg.Multiline(text, enable_events=True, key='-INPUT-', expand_x=True, expand_y=True, justification='left')
b1 = psg.Button('Ok', key='-OK-', font=('Arial Bold', 20))
b2 = psg.Button('Exit', font=('Arial Bold', 20))
layout = [[l1], [t1], [b1, b2]]
window = psg.Window('Multiline Demo', layout, size=(715, 250))
while True:
event, values = window.read()
if event == psg.WIN_CLOSED or event == 'Exit':
break
window.close()
程式將生成以下 **輸出** 視窗: