2017-02-21 7 views
0

ユーザー名とパスワードを入力できるログインページを作成します。両方の検証時に、ポップアップメッセージが表示され、 "ログインに成功しました"というメッセージが表示されるか、ポップアップメッセージ "ログインに失敗しました"が表示されます。 私はそれをやろうとしましたが、どこが間違っているのか分かりません。どんな助けでも大歓迎です。 (Login.pyとして保存された)次のように私のコードは次のとおりです。すべてのKivyログイン画面とポップアップでエラーが発生しました

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.textinput import TextInput 
from kivy.lang import Builder 
from kivy.uix.widget import Widget 
from kivy.uix.popup import Popup 

Builder.load_string(""" 

<[email protected]>: 
canvas: 

    Rectangle: 
     source: 'b.png' 
     pos: self.pos 
     size: self.size 
Label: 
    text: "PLEASE LOGIN OR SIGN UP" 
    center_x: (root.width/2) 
    top: (root.top/2)+ 200 
    font_size: 25 

TextInput: 
    id: txtuname 
    center_x: (root.width/2) 
    top: (root.top/2)+ 100 
    size_hint: None,None 
    multiline: False 
    hint_text: "username" 
    size: 250, 40 
    max_lines: 1 
    valign: 'middle' 
    halign: 'center' 
    on_text_validate: root.validate(); 

TextInput: 
    id: txtpswd 
    multiline: False 
    center_x: (root.width/2) 
    top: (root.top/2)+ 50 
    size_hint: None,None 
    hint_text: "password" 
    size: 250, 40 
    max_lines: 1 
    valign: 'middle' 
    halign: 'center' 
    on_text_validate: root.validate(); 
    password: True 

Button: 
    id: btnlogin 
    size: 90,35 
    pos: 300, 250 
    font_size: 18 
    background_color: (1,1,1,0.1) 
    text: "Login" 
    on_press: root.validate(txtuname.text,txtpswd.text) 

Button: 
    text: "Sign Up" 
    size: 90,35 
    pos: 400, 250 
    font_size: 18 
    background_color: (1,1,1,0.1) 

<CustomPopup>: 
Button: 
    id: btnpopup 
    text: "Login successfull" 
    size_hint: .5, .5 
    on_press: root.dismiss() 
""") 

class LoginScreen(Widget): 
    def validate(self,txtuname,txtpswd): 
     if txtuname == "username" and txtpswd == "password": 
      print(txtuname,txtpswd) 
      b = Button(on_press=self.show_popup) 
      return b 
     else: 
      print("Login failed") 

class CustomPopup(Popup): 
    def show_popup(self, b): 
     p = CustomPopup() 
     p.open() 

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


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

答えて

1

まずあなたがsign_inボタンを押し上で検証を行うため、両方のTextInput秒のon_text_validate: root.validate();を削除します。あなたはポップアップとして、このようなクラスを作成することができます。

from kivy.uix.anchorlayout import AnchorLayout 
from kivy.uix.popup import Popup  
from kivy.uix.label import Label 
from kivy.uix.button import Button 
from kivy.core.window import Window 


class Alert(Popup): 

    def __init__(self, title, text): 
     super(Alert, self).__init__() 
     content = AnchorLayout(anchor_x='center', anchor_y='bottom') 
     content.add_widget(
      Label(text=text, halign='left', valign='top') 
     ) 
     ok_button = Button(text='Ok', size_hint=(None, None), size=(Window.width/5, Window.height/5)) 
     content.add_widget(ok_button) 

     popup = Popup(
      title=title, 
      content=content, 
      size_hint=(None, None), 
      size=(Window.width/3, Window.height/3), 
      auto_dismiss=True, 
     ) 
     ok_button.bind(on_press=popup.dismiss) 
     popup.open() 

次に、あなたのvalidate()方法

def validate(self,txtuname,txtpswd): 
    # if inputs are valid: 
     Alert(title='yeah!', text='inputs are valid') 
    # else: 
     Alert(title='oops!', text='invalid inputs') 
+0

それは動作します!どうもありがとうございました :) – AS15

0

に私はkivyする新たなんです。私のコーディングはあなたを助けるでしょう..

def check_user(self): 
    obj=CustomPopup() 
    if self.ids.unam.text=='' or self.ids.pas.text=='': 
     obj.call_pops('Fill up please!','Some fields are empty!') 
    else: 
     if self.ids.unam.text=='sri' and self.ids.pas.text=='sri': 
      self.manager.current='Feed' 
      t="Success" 
      c="Logged in successfully!" 
      obj.call_pops(t,c) 
      self.ids.unam.text='' 
      self.ids.pas.text='' 
     else: 
      print "Warning" 
      t="Warning" 
      c="Wrong User or Password!" 
      obj.call_pops(t,c) 


class CustomPopup(Popup): 
    def call_pops(self,tit,conten): 
     cont=Button(text=conten) 
     pop=Popup(title=tit,content=cont,size_hint=(None, None), size=(250, 150),auto_dismiss=True) 
     pop.open() 
     cont.bind(on_press=pop.dismiss) 
関連する問題