Kivy kv 文件不工作
Kivy kv file is not working
我遇到了与此主题 中所述相同的问题。当我使用 Builder 并加载 kv 文件时,我有正常工作的应用程序。但是当我尝试使用自动加载 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
在您的 kv
文件中,您将 ScreenManagement
定义为其关联屏幕的根元素。但是在 build
中,您 return 一个新创建的 ScreenManagement
对象,它不会定义任何子对象。
解决方法:
将 build
定义为
def build(self):
pass
或将kv文件中ScreenManagement
的定义改为
<ScreenManagement>:
transition: FadeTransition()
MainScreen:
AnotherScreen:
所以这将适用于 所有 个新的 ScreenManagement
个对象。
您还可以添加:
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
并为您 AnotherScreen 做同样的事情。
检查您的 Python 版本和您正在使用的 Pygame 版本。我遇到了那个问题,我的问题来自 Pygame 的版本。
我遇到了与此主题
我的代码。 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
在您的 kv
文件中,您将 ScreenManagement
定义为其关联屏幕的根元素。但是在 build
中,您 return 一个新创建的 ScreenManagement
对象,它不会定义任何子对象。
解决方法:
将 build
定义为
def build(self):
pass
或将kv文件中ScreenManagement
的定义改为
<ScreenManagement>:
transition: FadeTransition()
MainScreen:
AnotherScreen:
所以这将适用于 所有 个新的 ScreenManagement
个对象。
您还可以添加:
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
并为您 AnotherScreen 做同样的事情。
检查您的 Python 版本和您正在使用的 Pygame 版本。我遇到了那个问题,我的问题来自 Pygame 的版本。