我是使用kivy开发android的新手。我创建了如下选项卡结构:

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"

如何将此代码添加到默认选项卡中?

最佳答案

您可以使用以下两个属性:default_tab_textdefault_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方法如下
class TabbedPanelApp(App):
    def build(self):
        tb_panel= TabbedPanel()
        tb_panel.default_tab_text = "Login Tab"
        tb_panel.default_tab_content = LoginView()

您还可以使用TabbedPanelApp属性修改整个TabbedPanelHeader,甚至使用default_tab_cls属性停用默认选项卡。所以,你有很多选择。只要看看doc

08-04 01:23