Fecha inicio: 01-04-2019
Fecha fin: 08-04-2019
Actividades
Modificar la aplicación para que sea responsive. (4)
Mejorar los Burndown Charts de la presentación. (2)
Corregir el contraste de la presentación. (1)
Historias de usuario
Como cliente quisiera que la aplicación se ajustara al tamaño de la pantalla de mis 3 móviles.
Condiciones de Satisfacción
La aplicación será responsive.
Velocidad inicial: 7
Velocidad final: 7
¿Que se hizo?
- Se mejoraron los Burndown Charts de la presentación de la pre entrega.
- Se modificaron los archivos main.py y main.kv para hacer que la aplicación sea responsive.
main.py
main.kvCode: Select all
import kivy kivy.require('1.10.1') from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition from kivy.lang import Builder from kivy.properties import ObjectProperty from kivy.uix.popup import Popup from kivy.uix.label import Label from database import DataBase import speech_recognition as sr class MainScreen(Screen): def btn_clk(self): r = sr.Recognizer() with sr.Microphone() as source: self.lbl.text = 'Say something...' audio = r.listen(source) try: self.lbl.text = 'You said: \n' + r.recognize_google(audio) except: pass class LoginScreen(Screen): email = ObjectProperty(None) password = ObjectProperty(None) def loginBtn(self): if db.validate(self.email.text, self.password.text): MainScreen.current = self.email.text self.reset() sm.current = "options" else: invalidLogin() def createBtn(self): self.reset() sm.current = "new" def reset(self): self.email.text = "" self.password.text = "" class NewAccountScreen(Screen): namee = ObjectProperty(None) email = ObjectProperty(None) password = ObjectProperty(None) def submit(self): if self.namee.text != "" and self.email.text != "" and self.email.text.count("@") == 1 and self.email.text.count(".") > 0: if self.password != "": db.add_user(self.email.text, self.password.text, self.namee.text) self.reset() sm.current = "login" else: invalidForm() else: invalidForm() def login(self): self.reset() sm.current = "login" def reset(self): self.email.text = "" self.password.text = "" self.namee.text = "" class OptionsScreen(Screen): pass class ScreenManagement(ScreenManager): pass def invalidLogin(): pop = Popup(title='Invalid Login', content=Label(text='Invalid username or password.'), size_hint=(None, None), size=(400, 400)) pop.open() def invalidForm(): pop = Popup(title='Invalid Form', content=Label(text='Please fill in all inputs with valid information.'), size_hint=(None, None), size=(400, 400)) pop.open() def existingAccount(): pop = Popup(title='Existing account', content=Label(text='Account already exists'), size_hint=(None, None), size=(400, 400)) pop.open() presentation = Builder.load_file("main.kv") sm = ScreenManagement() db = DataBase("users.txt") screens = [LoginScreen(name="login"), NewAccountScreen(name="new"),OptionsScreen(name="options"),MainScreen(name="main")] for screen in screens: sm.add_widget(screen) sm.current = "login" class MainApp(App): title = "TakeNotes" def build(self): return sm if __name__ == '__main__': MainApp().run()
ResponsiveeCode: Select all
#: import FadeTransition kivy.uix.screenmanager.FadeTransition #:include login.kv #:include options.kv ScreenManagement: transition: FadeTransition() LoginScreen: OptionsScreen: MainScreen: <MainScreen>: name: "main" spacing: 10 canvas.before: Color: rgba: (0.5,0.5,0.5, 1) Rectangle: size: self.size pos: self.pos FloatLayout: size_hint_y: None orientation: 'vertical' height: 50 size: root.size spacing: 20 padding: 20 ImageButton: pos_hint: {"top":1,"bottom":0} source: 'TakeNotes.png' on_press:root.btn_clk() on_press: self.background_color = (0.1, 0.1, 0.1, 1) on_release: self.background_color = (1, 1, 1, 1) FloatLayout: pos_hint: {"top":0} canvas.before: Color: rgba: (0.52,0.52,0.52, 1) Rectangle: size: self.size pos: self.pos Label: pos_hint: {"top":.5} id: my_label text: 'Content' Button: pos_hint: {"top":0} text: 'Export' on_press: self.background_color = (0.1, 0.1, 0.1, 1) on_release: self.background_color = (1, 1, 1, 1) on_release: app.root.current = "options" <LoginScreen>: name: "login" email: usrname password:passw spacing: 10 canvas.before: Color: rgba: (0.5,0.5,0.5, 1) Rectangle: size: self.size pos: self.pos FloatLayout: size_hint_y: None orientation: 'vertical' height: 50 size: root.size spacing: 20 padding: 20 FloatLayout: pos_hint: {"top":0} canvas.before: Color: rgba: (0.4,0.4,0.4, 1) Rectangle: size: self.size pos: self.pos Image: pos_hint: {"top":0} source: 'TakeNotes.png' Label: pos_hint: {"top":0} text: "Login" Label: pos_hint: {"top":0} text: "Username" TextInput: pos_hint: {"top":0} id: usrname hint_text: "Username" multiline: False Label: pos_hint: {"top":0} text: "Password" TextInput: pos_hint: {"top":0} id: passw hint_text: "Password" password: True multiline: False Button: pos_hint: {"top":0} text: 'Enter' on_press: self.background_color = (0.1, 0.1, 0.1, 1) #on_release: #self.background_color = (1, 1, 1, 1) #root.loginBtn() on_release: app.root.current = "options" Button: pos_hint: {"top":0} text: 'Create account' on_press: self.background_color = (0.1, 0.1, 0.1, 1) on_release: self.background_color = (1, 1, 1, 1) root.createBtn() <OptionsScreen>: name: "options" canvas.before: Color: rgba: (0.5,0.5,0.5, 1) Rectangle: size: self.size pos: self.pos FloatLayout: orientation: 'vertical' size: root.size spacing: 20 padding: 20 FloatLayout: canvas.before: Color: rgba: (0.4,0.4,0.4, 1) Rectangle: size: self.size pos: self.pos Image: pos_hint: {"top":0} source: 'TakeNotes.png' Label: pos_hint: {"top":0} text: "Options" Label: pos_hint: {"top":0} text: "Choose one" Button: pos_hint: {"top":0} text: 'Reconsider Login' on_press: self.background_color = (0.1, 0.1, 0.1, 1) on_release: self.background_color = (1, 1, 1, 1) on_press: app.root.current = "login" Button: pos_hint: {"top":0} text: 'Speech to Text' on_press: self.background_color = (0.1, 0.1, 0.1, 1) on_release: self.background_color = (1, 1, 1, 1) on_press: app.root.current = "main" <Container>: lbl: my_label <ImageButton@Button>: source: None Image: source: root.source pos: root.pos size: root.size <NewAccountScreen>: name: "new" canvas.before: Color: rgba: (0.5,0.5,0.5, 1) Rectangle: size: self.size pos: self.pos namee: namee email: email password: passw FloatLayout: orientation: 'vertical' height: 50 size: root.size spacing: 20 padding: 20 Label: pos_hint: {"top":0} text: "Create an Account" Label: pos_hint: {"top":0} text: "Name: " TextInput: pos_hint: {"top":0} id: namee multiline: False Label: pos_hint: {"top":0} text: "Email: " TextInput: pos_hint: {"top":0} id: email multiline: False Label: pos_hint: {"top":0} text: "Password: " TextInput: pos_hint: {"top":0} id: passw multiline: False password: True Button: pos_hint: {"top":0} text: "Already have an Account? Log In" on_release: root.manager.transition.direction = "left" root.login() Button: pos_hint: {"top":0} text: "Submit" on_release: root.manager.transition.direction = "left" root.submit()
Sobre el contraste de la presentación...

¿Que voy a hacer?
- Planificar el Sprint 11.
No se presentaron problemas.