TextInputのテキストをStringPropertyで取得したいのですが、動作しません。私は空の文字列を取得します。 2番目の例では、TextProperty全体をObjectPropertyとして宣言しています。最初の例で何が間違っていますか?TextInput by StringProperty
StringPropertyを使用してTextInput内のテキストを定義するにはどうすればよいですか?
最初の例では、 example1.pyの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 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()
テキストをsth固有に設定すると、TextInputに表示されます。あなたが設定した後、あなたは、双方向バインドを作成する必要がありStringPropertyを使用してテキストを取得したい場合
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ファイルで定義されているウィジェットの単純化された例であるためです。通常は2番目のバージョンに固執しますが、最初のバージョンではうまくいかない理由はありません。 – PalimPalim
'Text:root.textinputtext'では' StringVariable'の値がそうであれば 'TextInput'のテキストは変化しますが、その逆はありません。 – FJSevilla