2016-03-23 4 views
0

Login System; У меня есть эта ошибка. Как получить текст в txt1 и как сменить через кнопку?kivy Как получить текст в TextInput?

Файл "/home/hypermesh/Desktop/main.py", строка 11, в messageShow если self.txt1.text == "запас": AttributeError: 'Кнопка' объект не имеет атрибута 'txt1'

#-*- coding: utf-8 -*- 
from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.button import Button 
from kivy.uix.popup import Popup 
from kivy.uix.textinput import TextInput 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.widget import Widget 

def messageShow(self): 
    if self.txt1.text == "stock": 
     pop=Popup(text="yes") 
    else: 
     pop=Popup(text="error") 

class SimpleKivy(App): 

    def build(self): 
     grid=GridLayout(rows=3, cols=2) 
     lbl1=Label(text="ID :",italic=True, bold=True) 
     lbl2=Label(text="Password :",italic=True, bold=True) 
     txt1=TextInput(multiline=False, font_size=50) 
     txt2=TextInput(multiline=False, password=True) 
     btn1=Button(text="Exit",italic=True) 
     btn2=Button(text="OK",italic=True) 

     btn2.bind(on_press=messageShow) 

     grid.add_widget(lbl1) 
     grid.add_widget(txt1) 
     grid.add_widget(lbl2) 
     grid.add_widget(txt2) 
     grid.add_widget(btn1) 
     grid.add_widget(btn2) 
     return grid 

if __name__ == "__main__": 
    SimpleKivy().run() 

ответ

0

вы сделали это правильно ... но вы должны сохранить ссылку на Anthing вы хотите получить доступ позже (обычно прикрепив ее к себе)

def __init__(...): 
    ... 
    self.txt1=TextInput(multiline=False, font_size=50) 
    ... 

тогда ваша другая функция должна работать нормально (за исключением метод должен быть частью класса ..)

class SimpleKivy(App): 
    def messageShow(self,evt): 
     if self.txt1.text == "stock": 
      pop=Popup(text="yes") 
     else: 
      pop=Popup(text="error") 

    def build(self): 
     grid=GridLayout(rows=3, cols=2) 
     lbl1=Label(text="ID :",italic=True, bold=True) 

другой альтернативой является использование лямбды назвать

def messageShow(message): 
    print "GOT MESSAGE:",message 

class SimpleKivy(App): 
    def __init__(self,...): 
     txt1 = TextInput(...) 
     ... 
     btn.bind(on_press=lambda *a:messageShow(txt1.text)) 

в этом случае txt1 находится в области видимости переменных и в состоянии передать свою строку в messageShow

0

ТНХ этот код работает :)

def messageShow(message): 
    if message == "stock": 
     btn3=Button(text='Close me!') 
     pop=Popup(content=btn3, title='Information Message !') 
     pop.open() 
     btn3.bind(on_press=pop.dismiss) 

    else: 
     btn3=Button(text='Exit') 
     pop=Popup(content=btn3, title='Information Message !') 
     pop.open() 
     btn3.bind(on_press=pop.dismiss) 

class LoginScreen(GridLayout): 
    def __init__(self): 
     super(LoginScreen, self).__init__() 
     self.rows=3 
     self.cols=2 
     lbl1=Label(text="ID :",italic=True, bold=True) 
     lbl2=Label(text="Password :",italic=True, bold=True) 
     txt1=TextInput(multiline=False, font_size=50) 
     txt2=TextInput(multiline=False, password=True) 
     btn1=Button(text="Exit",italic=True) 
     btn2=Button(text="OK",italic=True) 
     btn2.bind(on_press=lambda *a:messageShow(txt1.text)) 
     self.add_widget(lbl1) 
     self.add_widget(txt1) 
     self.add_widget(lbl2) 
     self.add_widget(txt2) 
     self.add_widget(btn1) 
     self.add_widget(btn2) 

class SimpleKivy(App): 
    def build(self): 
     return LoginScreen() 

if __name__ == "__main__": 
    SimpleKivy().run() 

 Смежные вопросы

  • Нет связанных вопросов^_^