
- Kivy 教程
- Kivy - 首頁
- Kivy 基礎
- Kivy - 入門
- Kivy - 安裝
- Kivy - 架構
- Kivy - 檔案語法
- Kivy - 應用
- Kivy - Hello World
- Kivy - 應用生命週期
- Kivy - 事件
- Kivy - 屬性
- Kivy - 輸入
- Kivy - 行為
- Kivy 按鈕
- Kivy - 按鈕
- Kivy - 按鈕事件
- Kivy - 按鈕顏色
- Kivy - 按鈕大小
- Kivy - 按鈕位置
- Kivy - 圓形按鈕
- Kivy - 停用按鈕
- Kivy - 圖片按鈕
- Kivy 元件
- Kivy - 元件
- Kivy - 標籤
- Kivy - 文字輸入
- Kivy - 畫布
- Kivy - 線
- Kivy - 複選框
- Kivy - 下拉列表
- Kivy - 視窗
- Kivy - 滾動檢視
- Kivy - 走馬燈
- Kivy - 滑塊
- Kivy - 圖片
- Kivy - 彈出視窗
- Kivy - 開關
- Kivy - 微調器
- Kivy - 分隔器
- Kivy - 進度條
- Kivy - 氣泡
- Kivy - 選項卡面板
- Kivy - 散點圖
- Kivy - 手風琴
- Kivy - 檔案選擇器
- Kivy - 顏色選擇器
- Kivy - 程式碼輸入
- Kivy - 模態檢視
- Kivy - 切換按鈕
- Kivy - 相機
- Kivy - 樹檢視
- Kivy - reStructuredText
- Kivy - 操作欄
- Kivy - 媒體播放器
- Kivy - 模板檢視
- Kivy - 虛擬鍵盤
- Kivy - 觸控漣漪
- Kivy - 音訊
- Kivy - 影片
- Kivy - 拼寫檢查
- Kivy - 效果
- Kivy - 輸入記錄器
- Kivy - OpenGL
- Kivy - 文字
- Kivy - 文字標記
- Kivy - 設定
- Kivy 佈局
- Kivy - 佈局
- Kivy - 浮動佈局
- Kivy - 網格佈局
- Kivy - 箱式佈局
- Kivy - 堆疊佈局
- Kivy - 錨點佈局
- Kivy - 相對佈局
- Kivy - 頁面佈局
- Kivy - 回收佈局
- Kivy - 佈局巢狀
- Kivy 高階概念
- Kivy - 配置物件
- Kivy - 圖集
- Kivy - 資料載入器
- Kivy - 快取管理器
- Kivy - 控制檯
- Kivy - 動畫
- Kivy - 多筆畫
- Kivy - 時鐘
- Kivy - SVG
- Kivy - UrlRequest
- Kivy - 剪貼簿
- Kivy - 工廠
- Kivy - 手勢
- Kivy - 語言
- Kivy - 圖形
- Kivy - 繪製
- Kivy - 打包
- Kivy - 花園
- Kivy - 儲存
- Kivy - 向量
- Kivy - 工具
- Kivy - 檢查器
- Kivy - 工具
- Kivy - 日誌記錄器
- Kivy - 幀緩衝區
- Kivy 應用和專案
- Kivy - 繪圖應用
- Kivy - 計算器應用
- Kivy - 計時器應用
- Kivy - 相機處理
- Kivy - 圖片檢視器
- Kivy - 貝塞爾曲線
- Kivy - 畫布壓力測試
- Kivy - 圓形繪製
- Kivy - 元件動畫
- Kivy - 其他
- Kivy 有用資源
- Kivy - 快速指南
- Kivy - 有用資源
- Kivy - 討論
Kivy - 文字輸入
在桌面和 Web 應用程式中,您經常會看到一個矩形框,供使用者輸入一些文字。文字框是任何 GUI 工具包中必不可少的部件。在 Kivy 中,TextInput 提供了一個控制元件,使用者可以在其中輸入和編輯文字。
TextInput 控制元件可以自定義為接收單行或多行文字。可以使用滑鼠選擇文字的某一部分。還可以使用游標移動在其中執行全屏編輯。
TextInput 類定義在 kivy.uix.textinput 模組中。
from kivy.uix.textinput import TextInput textbox = TextInput(**kwargs)
TextInput 類中定義了以下屬性:
allow_copy - 決定是否允許複製文字。allow_copy 是一個 BooleanProperty,預設為 True。
background_color - 背景的當前顏色,格式為 (r, g, b, a)。它是一個 ColorProperty,預設為 [1, 1, 1, 1](白色)。
border - 用於 BorderImage 圖形指令的邊框。與 background_normal 和 background_active 一起使用。可用於自定義背景。它必須是一個包含四個值的列表:(bottom, right, top, left)。border 是一個 ListProperty,預設為 (4, 4, 4, 4)。
cursor - 指示當前游標位置的 (col, row) 值元組。如果要移動游標,可以設定新的 (col, row)。滾動區域將自動更新,以確保游標在視口中可見。cursor 是一個 AliasProperty。
cursor_color - 游標的當前顏色,格式為 (r, g, b, a)。cursor_color 是一個 ColorProperty,預設為 [1, 0, 0, 1]。
cut() - 將當前選擇複製到剪貼簿,然後將其從 TextInput 中刪除。
delete_selection(from_undo=False) - 刪除當前文字選擇(如果有)。
disabled_foreground_color - 停用時前景色當前顏色,格式為 (r, g, b, a)。disabled_foreground_color 是一個 ColorProperty,預設為 [0, 0, 0, 5](50% 透明黑色)。
font_name - 要使用的字型的檔名。路徑可以是絕對路徑或相對路徑。相對路徑由 resource_find() 函式解析。
font_name - 是一個 StringProperty,預設為 'Roboto'。此值取自 Config。
font_size - 文字的字型大小(以畫素為單位)。font_size 是一個 NumericProperty,預設為 15 sp。
foreground_color - 前景的當前顏色,格式為 (r, g, b, a)。oreground_color 是一個 ColorProperty,預設為 [0, 0, 0, 1](黑色)。
halign - 文字的水平對齊方式。halign 是一個 OptionProperty,預設為 'auto'。可用選項為:auto、left、center 和 right。
hint_text - 部件的提示文字,如果文字為空則顯示。hint_text 是一個 AliasProperty,預設為 ''。
hint_text_color - 提示文字 hint_text 的當前顏色,格式為 (r, g, b, a),ColorProperty 預設為 [0.5, 0.5, 0.5, 1.0](灰色)。
input_filter - 根據指定的模式過濾輸入,如果非 None。如果為 None,則不應用任何過濾。它是一個 ObjectProperty,預設為 None。可以是 None、'int'(字串)、'float'(字串)或可呼叫物件。
insert_text(substring, from_undo=False) - 在當前游標位置插入新文字。覆蓋此函式以預處理文字進行輸入驗證。
line_height - 一行的高度。此屬性會根據 font_name 和 font_size 自動計算。更改 line_height 將不會產生任何影響。line_height 是一個 NumericProperty,只讀。
line_spacing - 行間距。line_spacing 是一個 NumericProperty,預設為 0。
minimum_height - TextInput 內部內容的最小高度。minimum_height 是一個只讀的 AliasProperty。
multiline - 如果為 True,則部件將能夠顯示多行文字。如果為 False,則“Enter”鍵按下將使文字輸入失去焦點,而不是新增新行。
on_touch_down(touch) - 接收觸控按下事件。touch 引數是 MotionEvent 類的物件。它返回 bool 如果為 True,則觸控事件的分發將停止。如果為 False,則事件將繼續分發到部件樹的其餘部分。
on_touch_move(touch) - 接收觸控移動事件。觸控位於父級座標中。
on_touch_up(touch) - 接收觸控抬起事件。觸控位於父級座標中。
padding - 文字的填充:[padding_left, padding_top, padding_right, padding_bottom]。Padding 還接受兩個引數形式 [padding_horizontal, padding_vertical] 和一個引數形式 [padding]。Padding 是一個 VariableListProperty,預設為 [6, 6, 6, 6]。
password - 如果為 True,則部件將顯示其字元為 password_mask 中設定的字元集。
password_mask - 設定在 password 為 True 時用於遮蔽文字的字元。password_mask 是一個 StringProperty,預設為 '*'。
paste() - 將系統剪貼簿中的文字插入到 TextInput 的當前游標位置。
readonly - 如果為 True,則使用者將無法更改文字輸入的內容。
select_all() - 選擇此 TextInput 中顯示的所有文字。
select_text(start, end) - 選擇此 TextInput 中顯示的一部分文字。引數為 start - textinput.text 的索引,從中開始選擇,以及 end - textinput.text 的索引,到此結束選擇。
selection_color - 選擇的當前顏色,格式為 (r, g, b, a)。
selection_from - 如果正在進行或已完成選擇,則此屬性將表示選擇開始時的游標索引。
selection_text - 當前內容選擇。selection_text 是一個 StringProperty,預設為 '',只讀。
tab_width - 預設情況下,每個製表符將在文字輸入部件上替換為四個空格。您可以設定較低或較高的值。tab_width 是一個 NumericProperty,預設為 4。
text - 部件的文字。它是一個 AliasProperty。
用法
建立簡單的 Hello World:
widget = TextInput(text='Hello world')
如果要使用 Unicode 字串建立部件,請使用:
widget = TextInput(text=u'My unicode string')
當用戶在 TextInput 部件中輸入資料時,它將成為 text 屬性的值。
當 TextInput 物件的 text 屬性更改時,您可以呼叫回撥函式。
def callback(instance, value): print('The widget', instance, 'have:', value) textinput = TextInput() textinput.bind(text=callback)
當 multiline 屬性為 False 時,TextInput 接受單行輸入。當用戶按下 Enter 鍵時,將生成 on_text_validate 事件:
def callback(instance, value): print('The widget', instance, 'have:', value) textinput = TextInput(multiline=False) textinput.bind(on_text_validate=callback)
示例
讓我們使用上面解釋的 TextInput 類的某些屬性和方法。在下面的示例中,我們在 BoxLayout 中佈置了兩個多行文字框和兩個按鈕。
“複製”按鈕呼叫 gettext() 方法,該方法儲存來自上部文字框的選擇文字。
def gettext(self, instance): mydemoapp.text = self.text1.selection_text
“貼上”按鈕呼叫回撥函式 insert(),該函式在游標位置貼上選定的文字。
def insert(self, instance): self.text2.insert_text(mydemoapp.text)
這兩個函式繫結到兩個按鈕:
self.b1=Button(text='COPY') self.b1.bind(on_press=self.gettext) self.b2=Button(text='PASTE') self.b2.bind(on_press=self.insert)
build() 方法組裝文字框和按鈕。
以下是完整程式碼:
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.textinput import TextInput from kivy.uix.button import Button from kivy.config import Config Config.set('graphics', 'width', '720') Config.set('graphics', 'height', '300') Config.set('graphics', 'resizable', '1') class mydemoapp(App): text='' def gettext(self, instance): mydemoapp.text = self.text1.selection_text def insert(self, instance): self.text2.insert_text(mydemoapp.text) def build(self): main= BoxLayout(orientation= 'vertical') self.text1 = TextInput(multiline=True, font_size=20) btns = BoxLayout(orientation='horizontal') self.b1=Button(text='COPY') self.b1.bind(on_press=self.gettext) self.b2=Button(text='PASTE') self.b2.bind(on_press=self.insert) self.text2 = TextInput( multiline=True, font_size=20, foreground_color=[0,0,1,1] ) btns.add_widget(self.b1) btns.add_widget(self.b2) main.add_widget(self.text1) main.add_widget(btns) main.add_widget(self.text2) return main mydemoapp().run()
輸出
