【问题标题】:Simple kivy tab example简单的 kivy 选项卡示例
【发布时间】:2013-06-15 04:40:58
【问题描述】:

我是使用 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" 

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

【问题讨论】:

  • LoginView 代码不显示任何内容。我想你忘记发布 .kv 文件了。
  • 编辑代码并添加kv
  • 你只是复制了同一个 python 文件,多出一行
  • 抱歉误会。更新相同
  • 我发布了第二个答案,解释了如何包含您的 loginView。

标签: android python kivy


【解决方案1】:

您可以使用以下 2 个属性: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) 修改TabbedPanelAppbuild方法如下

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

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

【讨论】:

    【解决方案2】:

    假设 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 之类的名称用于其他语言中的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多