Получить значение textinput в приложении Kivy

Новичок в Python/Kivy пытается создать тестовое приложение с полем ввода, кнопкой "ОК" и меткой, которая должна изменять текст при нажатии кнопки "ОК". Но вместо этого я получаю "NameError: глобальное имя" txt1 "не определено". Что я делаю неправильно?

# import Kivy
import kivy
import random

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput

# my app
class MyApp(App):
# layout
    def build(self):
        layout = BoxLayout(padding=10, orientation='vertical')
        btn1 = Button(text="OK")
        btn1.bind(on_press=self.buttonClicked)
        layout.add_widget(btn1)
        lbl1 = Label(text="test")
        layout.add_widget(lbl1)
        txt1 = TextInput(text='', multiline=False)
        layout.add_widget(txt1)
        return layout

# button click function
    def buttonClicked(self,btn):
        lbl1.text = "You wrote " + txt1.text

# run app
if __name__ == "__main__":
    MyApp().run()

1 ответ

Решение

Использование self.txt1, self.lbl1 так далее..

class MyApp(App):
# layout
    def build(self):
        layout = BoxLayout(padding=10, orientation='vertical')
        btn1 = Button(text="OK")
        btn1.bind(on_press=self.buttonClicked)
        layout.add_widget(btn1)
        self.lbl1 = Label(text="test")
        layout.add_widget(self.lbl1)
        self.txt1 = TextInput(text='', multiline=False)
        layout.add_widget(self.txt1)
        return layout

# button click function
    def buttonClicked(self,btn):
        self.lbl1.text = "You wrote " + self.txt1.text

# run app
if __name__ == "__main__":
    MyApp().run()
 # join all items in a list into 1 big string

С помощью:

def buttonClicked(self,btn):
        lbl1.text = "You wrote " + txt1.text <- only exists in the build method
Другие вопросы по тегам