黑屏经理沮丧
black screen manager kivy
我正在尝试使用屏幕管理器和 .kv 文件构建一个简单的 Kivy (1.10.1) 应用程序,但我总是黑屏。
我的屏幕管理器(GUI/nco.py)
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager
from GUI.login import LoginScreen
class NCO(ScreenManager):
def add_widget(self, screen):
super(NCO, self).add_widget(screen)
# TODO: add a radial gradiant background from (0, 155, 190) to (0, 5, 20)
print("added screen:", screen.name)
class NCOApp(App):
def build(self):
nco = NCO()
nco.add_widget(LoginScreen(name="login"))
return nco
GUI/login.py
from kivy.uix.screenmanager import Screen
class LoginScreen(Screen):
def test(self):
mail = self.ids.mail.text.strip()
pwd = self.ids.pwd.text
print("e-mail:", mail)
print("password:", pwd)
GUI/login.kv
#:kivy 1.10.1
<LoginScreen>:
AnchorLayout:
size: self.parent.size
BoxLayout:
size_hint: None, None
size: 400, 35
orientation: "horizontal"
TextInput:
id: mail
font_size: 20
hint_text: "e-mail"
multiline: False
write_tab: False
TextInput:
id: pwd
font_size: 20
password: True
hint_text: "password"
multiline: False
write_tab: False
Button:
size_hint: .3, 1
text: "login"
on_press: root.manager.current.test()
main.py
from GUI.nco import NCOApp
from kivy.config import Config
Config.set("graphics", "fullscreen", "auto")
if __name__ == '__main__':
NCOApp().run()
我在不使用 ScreenManager 时已经成功显示了登录屏幕,并且无需调用 Builder.load_string()
我在网上搜索过,每个可行的解决方案都涉及调用 Builder.load_string()
,我不想使用它,是否可以让它工作?
问题 - 黑色 Window
1) 当执行 main.py 时,Kivy 会查找与您的 App class 同名的小写 Kv 文件,如果以 'App' 结尾则减去“App” 例如:
NCOApp -> nco.kv
2) 您已经创建了 LoginScreen 的实例,但没有与之关联的视图。
解决方案
在文件夹 GUI 中创建一个 kv 文件,nco.kv 并为 LoginScreen 添加以下视图:
#:include GUI//login.kv
输出
我正在尝试使用屏幕管理器和 .kv 文件构建一个简单的 Kivy (1.10.1) 应用程序,但我总是黑屏。
我的屏幕管理器(GUI/nco.py)
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager
from GUI.login import LoginScreen
class NCO(ScreenManager):
def add_widget(self, screen):
super(NCO, self).add_widget(screen)
# TODO: add a radial gradiant background from (0, 155, 190) to (0, 5, 20)
print("added screen:", screen.name)
class NCOApp(App):
def build(self):
nco = NCO()
nco.add_widget(LoginScreen(name="login"))
return nco
GUI/login.py
from kivy.uix.screenmanager import Screen
class LoginScreen(Screen):
def test(self):
mail = self.ids.mail.text.strip()
pwd = self.ids.pwd.text
print("e-mail:", mail)
print("password:", pwd)
GUI/login.kv
#:kivy 1.10.1
<LoginScreen>:
AnchorLayout:
size: self.parent.size
BoxLayout:
size_hint: None, None
size: 400, 35
orientation: "horizontal"
TextInput:
id: mail
font_size: 20
hint_text: "e-mail"
multiline: False
write_tab: False
TextInput:
id: pwd
font_size: 20
password: True
hint_text: "password"
multiline: False
write_tab: False
Button:
size_hint: .3, 1
text: "login"
on_press: root.manager.current.test()
main.py
from GUI.nco import NCOApp
from kivy.config import Config
Config.set("graphics", "fullscreen", "auto")
if __name__ == '__main__':
NCOApp().run()
我在不使用 ScreenManager 时已经成功显示了登录屏幕,并且无需调用 Builder.load_string()
我在网上搜索过,每个可行的解决方案都涉及调用 Builder.load_string()
,我不想使用它,是否可以让它工作?
问题 - 黑色 Window
1) 当执行 main.py 时,Kivy 会查找与您的 App class 同名的小写 Kv 文件,如果以 'App' 结尾则减去“App” 例如:
NCOApp -> nco.kv
2) 您已经创建了 LoginScreen 的实例,但没有与之关联的视图。
解决方案
在文件夹 GUI 中创建一个 kv 文件,nco.kv 并为 LoginScreen 添加以下视图:
#:include GUI//login.kv