2013-06-15 169 views
5

私はKivyを使用しているAndroid開発には初めてです。私は以下のようなタブ構造を作成しました:シンプルなkivyタブの例

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

デフォルトのタブにログインウィジェットを追加したいと思います。ログインウィジェットのコードです:

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

と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" 

私はデフォルトのタブにこのコードを追加することができますどのように?

+0

LoginViewコードには何も表示されません。私はあなたが.kvファイルを投稿するのを忘れたと思う。 –

+0

コードを編集して、kv – sam

+0

を追加して、同じpythonファイルを余分な行 –

答えて

4

default_tab_textdefault_tab_contentの2つのプロパティを使用できます。

だから、(あなたが動作しません)ログインコードは、次の1であると仮定すると:

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 

は、そのコードを仮定するとmain.py(TabbedPanelAppを持っているコード)と同じフォルダにあります。その後

1)あなたがすることもでき

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

を次のようにTabbedPanelAppbuild方法を変更します(それはクラスがあるので、私はそれを大文字を入れる)

from login import LoginView 

2)LoginViewをインポートdefault_tab_clsプロパティでTabbedPanelHeader全体を変更するか、do_default_tabプロパティでデフォルトのタブを無効にすることもできます。だから、多くの選択肢があります。ただ、(それはすでに自分のコンピュータ上で動作します)あなたの問題を修正する必要がありloginview.pyであり、それがmain.pyの同じフォルダ内にある、あなたのコードに次を追加するPythonのファイルの名前を仮定しdoc

2

に見てみましょう:

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

ただし、クラスは大文字で記述する必要があります。これは必須ではありませんが、それは良い習慣です。 loginViewのような名前は、他の言語の変数を意味します。

関連する問題