我有一个简单的应用程序,应该对不同的屏幕使用 ScreenManager。当我创建我的屏幕之一并将其设为 app.root 小部件时,一切正常。但是,当我将屏幕作为子项放入 ScreenManager 中时,它不会产生任何输出,就好像小部件根本不存在一样。
testScreenManager.py:
from kivy.app import App
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.graphics.vertex_instructions import Rectangle
from kivy.uix.screenmanager import ScreenManager, Screen
class MyScreenManager(ScreenManager):
pass
class myScreen(Screen):
pass
class myNavBoxes(BoxLayout):
pass
class myApp(App):
def build(self):
return MyScreenManager()
if __name__ == "__main__":
myApp().run()
我的.kv:
<MyScreenManager>:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
myScreen:
<myScreen>:
BoxLayout:
orientation: 'vertical'
size_hint: 0.8, 0.3
pos_hint: {'x':0.1, 'y':0.5}
TextInput:
id: username
hint_text: 'Username'
font_size: '20sp'
myNavBoxes:
<myNavBoxes>:
orientation: 'horizontal'
size_hint: 1, .2
pos_hint: {'x':.0, 'y':.0}
Button:
id: navButtonLogin
text: 'Login'
font_size: '15sp'
size_hint_y: None
这会生成一个空白的白色矩形,其中没有任何小部件。
我尝试了很多事情。一个主要问题是:如果我不使用自定义小部件(直接从普通 kivy 类继承)并使用基本 kivy 类,则代码会产生预期的输出:
<MyScreenManager>:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
Screen:
BoxLayout:
orientation: 'vertical'
size_hint: 0.8, 0.3
pos_hint: {'x':0.1, 'y':0.5}
TextInput:
id: username
hint_text: 'Username'
font_size: '20sp'
myNavBoxes:
<myNavBoxes>:
orientation: 'horizontal'
size_hint: 1, .2
pos_hint: {'x':.0, 'y':.0}
Button:
id: navButtonLogin
text: 'Login'
font_size: '15sp'
size_hint_y: None
问题是你的类名。让所有类名都以大写字母开头。
kv
文件对此敏感。