2016-03-23 26 views
0

Giriş Sistemi; Bu hatayı alıyorum.Txt1'de metin almak ve düğme aracılığıyla nasıl değiştirilir?kivy TextInput'ta metin nasıl alınır?

Dosya "/home/hypermesh/Desktop/main.py", satır 11, messageShow yılında ise self.txt1.text == "stok": AttributeError: 'Düğme' nesne hiçbir özelliği vardır '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() 

cevap

0

sen doğru olanı yaptın ... ama

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

ardından diğer fonksiyon dışında (iyi çalışması gerekir (genellikle kendini taktıktan) daha sonra erişmek istediğiniz anthing bir başvuru kaydetmek gerekir yöntem, sınıfın bir parçası olmalıdır ..)

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) 

başka alternatif değişken dar olduğundan bu kod çalışma

0

thx messageShow onun dize geçmek mümkün bu durumda txt1 içinde

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

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

adlandırmak lambdas kullanmaktır :)

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