2017-02-21 88 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

首先刪除這兩個TextInput S的on_text_validate: root.validate();因爲你做sign_in按下按鈕確認。在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

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

然後:您可以創建這樣的一個類作爲一個彈出。我認爲我的編碼會幫助你..

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)