2013-06-15 47 views
5

Tôi mới phát triển Android bằng Kivy. Tôi đã tạo cấu trúc tab như sau:Ví dụ về tab kivy đơn giản

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

Tôi muốn thêm tiện ích đăng nhập vào tab mặc định. Mã cho widget đăng nhập là:

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

và file kv là:

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

Làm thế nào tôi có thể thêm mã này vào tab mặc định?

+0

mã LoginView không hiển thị bất kỳ thứ gì. Tôi nghĩ bạn quên đăng tập tin .kv. –

+0

chỉnh sửa mã và thêm kv – sam

+0

bạn chỉ cần sao chép cùng một tệp python một lần nữa với một dòng phụ –

Trả lời

4

Bạn có thể sử dụng 2 thuộc tính sau: default_tab_textdefault_tab_content.

Vì vậy, giả sử đang đăng nhập của bạn là một sau (của bạn không hoạt động):

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 

Giả sử mã được trong thư mục giống như main.py (mã mà có TabbedPanelApp) . Sau đó

1) Nhập LoginView (Tôi đặt nó chữ hoa vì nó là một lớp)

from login import LoginView 

2) Sửa đổi các phương pháp build của TabbedPanelApp như sau

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

Bạn cũng có thể sửa đổi toàn bộ TabbedPanelHeader với thuộc tính default_tab_cls hoặc thậm chí hủy kích hoạt tab mặc định với thuộc tính do_default_tab. Vì vậy, bạn có nhiều lựa chọn. Chỉ cần có một cái nhìn vào doc

2

Giả sử tên của file python là loginview.py và nó đang ở trong cùng một thư mục của main.py, thêm dòng sau vào code của bạn nên khắc phục vấn đề của bạn (nó hoạt động trên máy tính của tôi đã được):

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

Nhưng lưu ý rằng các lớp học phải được viết bằng chữ hoa. Đây không phải là bắt buộc nhưng nó là một thực hành tốt. Các tên như loginView có nghĩa là cho các biến trong các ngôn ngữ khác.

Các vấn đề liên quan