我是使用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"
如何将此代码添加到默认标签中?
答案 0 :(得分: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
的{{1}}方法,如下所示
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
属性停用默认选项卡。所以,你有很多选择。只需查看doc
答案 1 :(得分: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
这样的名称适用于其他语言的变量。