[英]Getting TextInput value with ScreenManager in Kivy 1.10 and Python 2.7.9
Using Kivy 1.10.0 with Python 2.7.9 I am trying to get the TextInput value entered by user when Button (my_button2) is clicked .And although I have been able to get this working with GridLayout it seems like the method I am using is not working with ScreenManager with BoxLayout . 在Python 2.7.9中使用Kivy 1.10.0和Python 2.7.9时,我试图获取用户在单击Button(my_button2)时输入的TextInput值。尽管我已经能够使用GridLayout进行此操作,但看来我正在使用的方法是无法与BoxManager一起使用ScreenManager。 Error received is : AttributeError: 'ScreenTwo' object has no attribute 'inpt' when my_button2
收到的错误是:AttributeError:当my_button2时,“ ScreenTwo”对象没有属性“ inpt”
After clicking 'Next Screen ' button , it takes me to page where user enters text value , and 'print' button should print it 单击“下一屏”按钮后,将带我到用户输入文本值的页面,并且“打印”按钮应将其打印出来
Please see below : 请看下面:
import kivy
from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
class ScreenOne(Screen):
def __init__ (self,**kwargs):
super (ScreenOne, self).__init__(**kwargs)
my_box1 = BoxLayout(orientation='vertical')
my_button1 = Button(text="Next Screen ",size_hint_y=None,size_y=100)
my_button1.bind(on_press=self.changer)
my_box1.add_widget(my_button1)
self.add_widget(my_box1)
def changer(self,*args):
self.manager.current = 'screen2'
class ScreenTwo(Screen):
def __init__(self,**kwargs):
super (ScreenTwo,self).__init__(**kwargs)
layout = BoxLayout(orientation='vertical')
self.add_widget(layout)
inpt = TextInput(text="Some text ",size_y=50)
layout.add_widget(inpt)
my_button2 = Button(text="Print ")
my_button2.bind(on_press=self.click)
layout.add_widget(my_button2)
Home_btn = Button(text="Back")
Home_btn.bind(on_press=self.home)
layout.add_widget(Home_btn)
def click(self,my_button2):
entered_value = self.inpt.text
print entered_value
def home(self,*args):
self.manager.current = 'screen1'
class TestApp(App):
def build(self):
my_screenmanager = ScreenManager()
screen1 = ScreenOne(name='screen1')
screen2 = ScreenTwo(name='screen2')
my_screenmanager.add_widget(screen1)
my_screenmanager.add_widget(screen2)
return my_screenmanager
if __name__ == '__main__':
TestApp().run()
second screen 第二屏
When you use self you are trying to access members of the class, but in your case inpt it is not since it is a variable any, if you want to be a member of the class you must put forward self, in your case change: 当您使用self时,您尝试访问该类的成员,但是在inpt中,它不是变量,因为它是任何变量,如果您想成为该类的成员,则必须提出self,在您的情况下进行更改:
inpt = TextInput(text="Some text ",size_y=50)
layout.add_widget(inpt)
to: 至:
self.inpt = TextInput(text="Some text ",size_y=50)
layout.add_widget(self.inpt)
Note: I recommend you read OOP basics, if you are not going to have many of these problems. 注意: 如果您不会遇到很多此类问题,建议您阅读OOP基础知识。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.