2013-06-15 9 views
5

Sono nuovo nello sviluppo di Android utilizzando Kivy. Ho creato una struttura di tabulazione come di seguito:Esempio di scheda kivy semplice

from kivy.app import App 
from kivy.uix.tabbedpanel import TabbedPanel 
from kivy.uix.tabbedpanel import TabbedPanelHeader 
from kivy.uix.button import Button 
from kivy.uix.label import Label 
from kivy.uix.image import Image 

class TabbedPanelApp(App): 
    def build(self): 
     tb_panel= TabbedPanel() 

     # Create text tab   
     th_text_head = TabbedPanelHeader(text='Text tab') 
     th_text_head.content= Label(text='This is my text content') 

     # Create image tab 
     th_img_head= TabbedPanelHeader(text='Image tab') 
     th_img_head.content= Image(source='sample.jpg',pos=(400, 100), size=(400, 400)) 

     # Create button tab 
     th_btn_head = TabbedPanelHeader(text='Button tab') 
     th_btn_head.content= Button(text='This is my button',font_size=20) 

     tb_panel.add_widget(th_text_head) 
     tb_panel.add_widget(th_img_head) 
     tb_panel.add_widget(th_btn_head)   

     return tb_panel 

if __name__ == '__main__': 
    TabbedPanelApp().run() 

Voglio aggiungere il widget di accesso alla scheda predefinita. Il codice per widget di login è:

import kivy 
kivy.require('1.0.5') 

from kivy.uix.gridlayout import GridLayout 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.button import Button 
from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.widget import Widget 
from kivy.properties import ObjectProperty, StringProperty 

class loginView(Widget): 
    status=ObjectProperty(None) 
    def validate(self,username,password): 
     print "user - ", username 
     print "pwd - ", password 
     if username == password: 
      print "in if - ", username,password  
      self.status.text="Login sucess" 
     #mainClass().run() 
     else: 
      self.status.text="Login failed" 

class afterLogin(Widget): 
    def dumb(self): 
     l = BoxLayout(cols="2") 
     btn = Button(text="ad") 
     l.add_widget(btn) 
     print "flag" 

class mainClass(App): 
    def build(self): 
     return loginView() 

if __name__ == '__main__': 
    mainClass().run() 

e il file kv è:

#:kivy 1.0.5 

<loginView>: 
    status:result 
    Label: 
     text:"Contacts Manager" 
     pos:600,600 
     font_size:40 


    Label: 
     text:"Username" 
     pos:450,400 

    Label: 
     text:"Password" 
     pos:450,300 

    TextInput: 
     multiline:False 
     pos:600,425 
     size:200,45 
     font_size:20 
     id:username 

    TextInput: 
     multiline:False 
     pos:600,325 
     password:True 
     size:200,45 
     font_size:20 
     id:password 
    Button: 
     text:"Login" 
     size:100,50 
     pos:600,250 
     on_press:root.validate(username.text,password.text) 
    Label: 
     text:"" 
     pos:600,100 
     id:result 
<afterLogin>: 
    Label: 
     text:"Welcome" 

Come posso aggiungere questo codice nella scheda predefinita?

+0

il codice LoginView non visualizza nulla. Penso che tu abbia dimenticato di pubblicare il file .kv. –

+0

modificato il codice e aggiunto kv – sam

+0

è sufficiente copiare nuovamente lo stesso file python con una riga aggiuntiva –

risposta

4

È possibile utilizzare le seguenti 2 proprietà: default_tab_text e default_tab_content.

Quindi, supponendo che il codice di login è la seguente (il vostro non funziona):

import kivy 
kivy.require('1.0.5') 

from kivy.uix.gridlayout import GridLayout 
from kivy.uix.label import Label 
from kivy.lang import Builder 

Builder.load_string(""" 
<Loginview>: 
    cols:2 
    padding: 200 
    Label: 
     text: "username" 
    TextInput: 
    Label: 
     text: "password" 
    TextInput: 
""") 

#Name of classes are always uppercase 
class LoginView(GridLayout): 
    pass 

Supponendo che il codice è nella stessa cartella del main.py (il codice che ha il TabbedPanelApp) . Poi

1) Introduzione del LoginView (l'ho messo in alto a caso perché è una classe)

from login import LoginView 

2) Modificare il metodo di TabbedPanelAppbuild come segue

class TabbedPanelApp(App): 
    def build(self): 
     tb_panel= TabbedPanel() 
     tb_panel.default_tab_text = "Login Tab" 
     tb_panel.default_tab_content = LoginView() 

È inoltre possibile modificare l'intero TabbedPanelHeader con la proprietà default_tab_cls oppure disattivare la scheda predefinita con la proprietà do_default_tab. Quindi, hai molte opzioni. Basta dare un'occhiata al doc

2

Supponendo che il nome del file di pitone è loginview.py ed è nella stessa cartella del main.py, aggiungendo quanto segue al vostro codice dovrebbe risolvere i vostri problemi (funziona sul mio computer già):

from loginview import loginView 

class TabbedPanelApp(App): 
    def build(self): 
     tb_panel= TabbedPanel() 

     tb_panel.default_tab_text = "Login Tab" 
     tb_panel.default_tab_content = loginView() 

Ma si noti che le classi devono essere scritte in maiuscolo. Questo non è obbligatorio ma è una buona pratica. Nomi come loginView sono destinati a variabili in altre lingue.