Простой пример киви

Я новичок в разработке 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" 

Как добавить этот код на вкладку по умолчанию?

Вы можете использовать следующие 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 . Таким образом, у вас есть много вариантов. Просто взгляните на документ

Предполагая, что имя файла python является 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 , предназначены для переменных на других языках.