我想通過StringProperty獲取我的TextInput的文本,但它不起作用。我得到一個空字符串。在第二個示例中,我將整個TextInput聲明爲ObjectProperty,然後它可以工作。我的第一個例子有什麼問題?kivy TextInput的StringProperty參考文本
如何使用StringProperty來定義TextInput中的文本?
第一個例子不打印的TextInput的文本 example1.py
from kivy.app import App
from kivy.base import Builder
from kivy.properties import StringProperty
from kivy.uix.boxlayout import BoxLayout
Builder.load_string("""
<rootwi>:
orientation: 'vertical'
Button:
on_press: root.print_txt()
TextInput:
text: root.textinputtext
""")
class rootwi(BoxLayout):
textinputtext = StringProperty()
def print_txt(self):
print(self.textinputtext)
class MyApp(App):
def build(self):
return rootwi()
if __name__ == '__main__':
MyApp().run()
第二個例子做的TextInput的打印文本,但使用OBJECTPROPERTY不StringProperty example2.py
from kivy.app import App
from kivy.base import Builder
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
Builder.load_string("""
<rootwi>:
txt: txt
orientation: 'vertical'
Button:
on_press: root.print_txt()
TextInput:
id: txt
""")
class rootwi(BoxLayout):
txt = ObjectProperty()
def print_txt(self):
print(self.txt.text)
class MyApp(App):
def build(self):
return rootwi()
if __name__ == '__main__':
MyApp().run()
如果我將文本設置爲特定的,它顯示在TextInput中。(但仍不能打印)
from kivy.app import App
from kivy.base import Builder
from kivy.properties import StringProperty
from kivy.uix.boxlayout import BoxLayout
Builder.load_string("""
<rootwi>:
orientation: 'vertical'
Button:
on_press: root.print_txt()
TextInput:
text: root.textinputtext
""")
class rootwi(BoxLayout):
textinputtext = StringProperty()
def __init__(self, **kwargs):
self.textinputtext = 'palim'
super(rootwi, self).__init__(**kwargs)
def print_txt(self):
print(self.textinputtext)
class MyApp(App):
def build(self):
return rootwi()
if __name__ == '__main__':
MyApp().run()
爲什麼不直接使用'TextInput.text'屬性? – FJSevilla
,因爲這是一個由多個文本輸入,標籤,按鈕組成的小部件的簡化示例,所有這些都在kv文件中定義。通常我會堅持第二個版本,但我不明白爲什麼我不能使用第一個版本。 – PalimPalim
對於'text:root.textinputtext',如果'StringVariable'的值確實會改變'TextInput'的文本,但是反之不會。 – FJSevilla