2013-06-15 2 views
5

Я новичок в разработке Android, используя Kivy. Я создал структуру табуляции, как показано ниже:Простой пример kivy tab

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

и файл киловольт является:

#: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

код входа в системуВеб-код не отображает ничего. Я думаю, вы забыли разместить файл .kv. –

+0

отредактировал код и добавил kv – sam

+0

, вы просто скопируете тот же файл python снова с дополнительной строкой –

ответ

4

Вы можете использовать следующие 2 свойства: default_tab_text и default_tab_content.

Таким образом, предполагается, что ваш код входа является следующий один (ваш не работает):

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) Импорт LoginView (я положил его прописные, так как это класс)

from login import LoginView 

2) Изменить build метод TabbedPanelApp следующим

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

Вы можете также измените все TabbedPanelHeader с помощью свойства default_tab_cls или даже отключите вкладку по умолчанию с помощью свойства do_default_tab. Таким образом, у вас есть много вариантов. Просто взгляните на doc

2

Предполагая, что имя файла питон loginview.py и находится в той же папке main.py, добавив следующую строку в ваш код должен исправить свои проблемы (она работает на моем компьютере уже есть):

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, предназначены для переменных на других языках.

Смежные вопросы