2014-10-11 98 views
4

Python/Kivy的新手试图通过一个输入框,一个ok按钮和一个应该在单击ok按钮时更改文本的标签来构建一个测试应用程序。但相反,我得到'NameError:全球名称'txt1'未定义'。我究竟做错了什么?在Kivy应用程序中获取textinput值

# 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() 

回答

7

使用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 
+0

将这种方法运用工作时千伏语言? – supreme 2017-07-23 22:11:16

+0

在KV中,您应该可以使用: TextInput:\ n text:“”\ n multiline:False – 2017-12-13 17:07:09