Ich möchte den Text meines TextInput über eine StringProperty abrufen, aber es funktioniert nicht. Ich bekomme eine leere Zeichenfolge. Im zweiten Beispiel deklariere ich den gesamten TextInput als ObjectProperty und dann funktioniert es. Was ist falsch an meinem ersten Beispiel?Kivy-Referenztext von TextInput von StringProperty
Wie kann eine StringProperty verwendet werden, um den Text in einem TextInput zu definieren?
Erstes Beispiel druckt nicht Text von 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()
Zweites Beispiel druckt Text von TextInput-, verwendet aber eine Object nicht String 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()
Wenn ich den Text auf den spezifischen Wert setze, wird er im TextInput angezeigt. (Aber immer noch kann nicht gedruckt werden)
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()
Warum verwenden Sie das Attribut 'TextInput.text' nicht direkt? – FJSevilla
, da dies ein vereinfachtes Beispiel für ein Widget ist, das aus mehreren Texteingaben, Beschriftungen und Schaltflächen besteht, die alle in der kv-Datei definiert sind. Normalerweise würde ich bei der zweiten Version bleiben, aber ich verstehe einfach nicht, warum ich nicht mit der ersten Version arbeiten kann. – PalimPalim
Mit 'text: root.textinputtext' ändert sich der Text von' TextInput', wenn der Wert der 'StringVariable', aber nicht umgekehrt. – FJSevilla