若尚未看過Kivy UIX篇 widget篇 TextInput類 attribute篇 講解,建議看完之後對TextInput有一定了解在看這篇喔。
根據官網TextInput類繼承自kivy.uix.behaviors.focus.FocusBehavior與kivy.uix.widget.Widget,因此TextInput的method皆來自這兩類。詳細的可以參考Kivy UIX篇 widget篇 widget類 method篇 講解,基本上是通用的。
TextInput類專用method有以下幾個:
1.on_text_validate:當multiline=False時才可以使用此Interaction,當輸入完文字後按下Enter鍵及觸發此method
在main.py中寫下程式碼:
from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.properties import ObjectProperty class MyLayout(GridLayout): a1 = ObjectProperty(None) a2 = ObjectProperty(None) def btn1(self): self.a2.text = 'you type \'{}\' in textinput'.format(self.a1.text) class Myapp(App): def build(self): return MyLayout() if __name__ == '__main__': Myapp().run()
btn1函數代表:觸發此函數時將a2的text屬性指定為'you type \'{}\' in textinput'.format(self.a1.text)
在my.kv中寫下此段程式碼:
<MyLayout>: a1: b1 a2: b2 rows: 2 TextInput: id: b1 multiline: False on_text_validate: root.btn1() #當游標在此TextInput且按下Enter鍵後觸btn1函數 Label: id: b2 font_size: 40 text: ''
執行結果如下:
2.
on_double_tap(雙擊Text Input時觸發,預設為選擇光標位置周圍的文本)、
on_triple_tap(連續三次點擊Text Input時觸發,預設為選擇光標位置的整行文字'注意:必須要存在下一行才可以觸發(我猜是程式要確認有換行符號)')
on_quad_touch(當四根手指同時觸摸Text Input時觸發,預設為選擇全部文字)
我們可以自己定義當Text Input被雙擊、連續三次點擊、四根手指同時觸摸時的event,但我建議不要,因為預設的event與我們平常的使用習慣相同,因此沒必要更改,若有需要請自行更改,這邊不另外示範。
3.delete_selection(from_undo=False):刪除被選取的文字
在main.py中寫下程式碼:
from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.properties import ObjectProperty class MyLayout(GridLayout): a1 = ObjectProperty(None) a2 = ObjectProperty(None) def btn1(self): self.a1.delete_selection(from_undo=False) class Myapp(App): def build(self): return MyLayout() if __name__ == '__main__': Myapp().run()
btn1函數內容為:a1物件呼叫delete_selection()方法
在my.kv中寫下此段程式碼:
<MyLayout>: a1: b1 a2: b2 rows: 2 TextInput: id: b1 Button: id: b2 text: 'press me' on_press: root.btn1()
執行結果如下:
4.select_all():選取Text Input內所有文字
在main.py中寫下程式碼:
from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.properties import ObjectProperty class MyLayout(GridLayout): a1 = ObjectProperty(None) a2 = ObjectProperty(None) def btn1(self): self.a1.select_all() class Myapp(App): def build(self): return MyLayout() if __name__ == '__main__': Myapp().run()
btn1函數內容為:a1物件呼叫select_all()方法
在my.kv中寫下此段程式碼:
<MyLayout>: a1: b1 a2: b2 rows: 2 TextInput: id: b1 Button: id: b2 text: 'press me' on_press: root.btn1()
執行結果如下:
5.select_text(start, end):選擇從index為start到end的文字(我目前測試的結果,只能作用在第一行......)
在main.py中寫下程式碼:
from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.properties import ObjectProperty class MyLayout(GridLayout): a1 = ObjectProperty(None) a2 = ObjectProperty(None) def btn1(self): self.a1.select_text(2,6) class Myapp(App): def build(self): return MyLayout() if __name__ == '__main__': Myapp().run()
btn1函數內容為:a1物件呼叫select_text()方法,此例select_text(2,6)代表選取第三個到第六個文字。(至於為什麼是第三個到第六個,我猜應該可以與python中的range用法類比)
在my.kv中寫下此段程式碼:
<MyLayout>: a1: b1 a2: b2 rows: 2 TextInput: id: b1 Button: id: b2 text: 'press me' on_press: root.btn1()
執行結果如下:
沒有留言:
張貼留言