2016-03-23 230 views
0

ログインシステム。 私はこのエラーがあります。テキストを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) 

別の代替は、可変範囲にあり、このコードが動作

0

THXをmessageShowために、その文字列を渡すことができ、この場合TXT1に

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

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

それを呼び出すためにラムダを使用することである:)

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() 
関連する問題