我遇到了与此主题kv incorrect中描述的问题相同的问题。当我使用Builder并加载kv文件时,我有正常工作的应用程序。但是当我尝试使用autoload kv文件时,我只有黑屏。有人能解释我为什么吗?谢谢你的帮助。
我的代码。 main.py
import kivy
kivy.require('1.9.1') # replace with your current kivy version !
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
class MainScreen(Screen):
pass
class AnotherScreen(Screen):
pass
class ScreenManagement(ScreenManager):
pass
class Test(App):
def build(self):
return ScreenManagement()
if __name__ == "__main__":
Test().run()
kv文件。 test.kv
#:kivy 1.9.1
#: import FadeTransition kivy.uix.screenmanager.FadeTransition
ScreenManagement:
transition: FadeTransition()
MainScreen:
AnotherScreen:
<MainScreen>:
name: "main"
Button:
on_release: app.root.current = "other"
text: "Next Screen"
font_size: 50
<AnotherScreen>:
name: "other"
Button:
on_release: app.root.current = "main"
text: "Prev Screen"
font_size: 50
答案 0 :(得分:2)
在kv
文件中,您将ScreenManagement
定义为具有关联屏幕的根元素。但是在build
中,您将返回一个新创建的ScreenManagement
对象,该对象不会定义任何子项。
解决方案:
将build
定义为
def build(self):
pass
或将kv文件中ScreenManagement
的定义更改为
<ScreenManagement>:
transition: FadeTransition()
MainScreen:
AnotherScreen:
所以这将适用于所有新ScreenManagement
个对象。
答案 1 :(得分:0)
您还可以添加:
from kivy.properties import ObjectProperty
然后改变:
class ScreenManagement(ScreenManager):
pass
到此:
class ScreenManagement(screenManager):
mainscreen = ObjectProperty(None)
anotherscreen = ObjectProperty(None)
然后在您的.kv文件中要更改此内容:
ScreenManagement:
transition: FadeTransition()
MainScreen:
AnotherScreen:
到此:
<ScreenManagement>:
transition: FadeTransition()
mainscreen: mainscreen
anotherscreen: anotherscreen
然后为你的MainScreen添加和id如下:
<MainScreen>:
id: mainscreen
并为你做同样的事情。
答案 2 :(得分:0)
检查您的Python版本和您使用的Pygame版本。我遇到了这个问题,而我的问题来自Pygame的版本。