#:kivy 1.11.1
<myManager>:
connPage:
myGame:
<connPage>:
name: "main"
GridLayout:
cols: 1
GridLayout:
cols: 2
Label:
text: "Password: "
TextInput:
id: password
multiline: False
Button:
text: "Submit"
on_release:
app.root.current = "mygame"
<myGame>:
name: "mygame"
Button:
text: "Go back"
on_release:
app.root.current = "main"
-----------------------------------------------------------------------------------------------------
import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.clock import Clock
from kivy.core.window import Window
from kivy.uix.scrollview import ScrollView
from kivy.lang import Builder
import os
import sys
kivy.require("1.11.1")
class connPage(Screen):
pass
class myGame(Screen):
pass
class myManager(ScreenManager):
pass
kv = Builder.load_file("stylesheet.kv")
class MyApp(App):
def build(self):
return kv
if __name__ == "__main__":
MyApp().run()
____________________________________________________________________________________________________
你的 .kv
文件不包括任何 根规,只有类规则。<class>:
是一个类规则。class:
是一个根规则。
这意味着kivy 是否 加载你的kv文件,但kv文件只说 "如果你遇到一个 myManager
类,样式是这样的。"。您可以添加一个根规则或手动返回根部件。
根规则。
myManager:
connPage:
myGame:
<connPage>:
name: "main"
...
在代码中返回根部件
kv = Builder.load_file("stylesheet.kv")
class MyApp(App):
def build(self):
return myManager()
还有一个问题
myManager:
connPage:
myGame:
这些类都是小写的,所以kivy会解析出 connPage:
如同给 myManager
有名字 connPage
和价值 None
(同样适用于 myGame:
). 为了规避这个名称,所有的类都大写。这一点很容易被忽略,因为它只在 小纸条. 一般来说,python鼓励遵循 蛋白质8 样式指南--通常这只是纯粹的样式,不会改变代码的意义和行为,但对于kv文件来说,区分属性(属性)和子代(部件)是很重要的。所以根规则应该是这样的。
myManager:
ConnPage:
MyGame:
<ConnPage>:
...
而类的名字也应该相应地命名。
class ConnPage(Screen):
pass
class MyGame(Screen):
pass