已禁用 python:屏幕管理器
KIVY python: ScreenManager
这段代码有什么问题? (它显示一个空屏幕)
我想有 2 个屏幕,每个屏幕上有 1 个按钮可以简单地添加一个小部件(来自 python 代码),还有 1 个按钮可以切换到另一个屏幕。
当我 运行 代码时,我可以看到一个没有按钮和标签的空白屏幕。如何解决所有这些问题?
PS:当我执行以下操作时它完美地工作:
class MyScreenManager(ScreenManager):
pass
# ... and
class MyAppli(App):
def build(self):
Window.clearcolor=(1,1,1,1)
return MyScreenManager()
debug.py:
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.label import Label
from kivy.lang import Builder
class MyScreenManager(ScreenManager):
def initialize(self): # I know this is not necessary,
# but in my real code, i have to proceed like this.
# ... (some instructions)
pass
class Menu1(Screen):
def add_label(self):
self.add_widget(Label(text="Hello", color=(1,0,0,1)))
class Menu2(Screen):
def add_label(self):
self.add_widget(Label(text="Hello", color=(1,0,0,1)))
Builder.load_file("debug.kv")
class MyAppli(App):
def build(self):
Window.clearcolor = (1,1,1,1)
return MyScreenManager().initialize()
if __name__ == '__main__':
MyAppli().run()
debug.kv:
#:kivy 1.9.1
<MyScreenManager>:
Menu1:
id: menu1
Menu2:
id: menu2
<Menu1>:
name: "screen1"
BoxLayout:
Label:
text:"Screen 1"
color:(1,0,0,1)
Button:
text:"Add a label"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.ids.menu1.add_label()
Button:
text:"Go to screen 2"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.current = "screen2"
<Menu2>:
name: "screen2"
BoxLayout:
Label:
text:"Screen 2"
color:(1,0,0,1)
Button:
text:"Add a label"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.ids.menu2.add_label()
Button:
text:"Go to screen 1"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.current = "screen1"
请在 MyScreenManager class 中执行以下操作。具体请参考示例
片段
class MyScreenManager(ScreenManager):
def __init__(self, **kwargs):
super(MyScreenManager, self).__init__(**kwargs)
self.initialize()
def initialize(self): # I know this is not necessary,
# but in my real code, i have to proceed like this.
# ... (some instructions)
print("MyScreenManager.initialize called")
...
class MyAppli(App):
def build(self):
Window.clearcolor = (1, 1, 1, 1)
return MyScreenManager()
例子
debug.py
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.label import Label
from kivy.lang import Builder
class MyScreenManager(ScreenManager):
def __init__(self, **kwargs):
super(MyScreenManager, self).__init__(**kwargs)
self.initialize()
def initialize(self): # I know this is not necessary,
# but in my real code, i have to proceed like this.
# ... (some instructions)
print("MyScreenManager.initialize called")
class Menu1(Screen):
def add_label(self):
self.add_widget(Label(text="Hello", color=(1,0,0,1)))
class Menu2(Screen):
def add_label(self):
self.add_widget(Label(text="Hello", color=(1,0,0,1)))
Builder.load_file("debug.kv")
class MyAppli(App):
def build(self):
Window.clearcolor = (1, 1, 1, 1)
return MyScreenManager()
if __name__ == '__main__':
MyAppli().run()
debug.kv
#:kivy 1.10.0
<MyScreenManager>:
Menu1:
id: menu1
Menu2:
id: menu2
<Menu1>:
name: "screen1"
BoxLayout:
Label:
text:"Screen 1"
color:(1,0,0,1)
Button:
text:"Add a label"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.ids.menu1.add_label()
Button:
text:"Go to screen 2"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.current = "screen2"
<Menu2>:
name: "screen2"
BoxLayout:
Label:
text:"Screen 2"
color:(1,0,0,1)
Button:
text:"Add a label"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.ids.menu2.add_label()
Button:
text:"Go to screen 1"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.current = "screen1"
输出
Output Apps Running
这段代码有什么问题? (它显示一个空屏幕) 我想有 2 个屏幕,每个屏幕上有 1 个按钮可以简单地添加一个小部件(来自 python 代码),还有 1 个按钮可以切换到另一个屏幕。 当我 运行 代码时,我可以看到一个没有按钮和标签的空白屏幕。如何解决所有这些问题?
PS:当我执行以下操作时它完美地工作:
class MyScreenManager(ScreenManager):
pass
# ... and
class MyAppli(App):
def build(self):
Window.clearcolor=(1,1,1,1)
return MyScreenManager()
debug.py:
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.label import Label
from kivy.lang import Builder
class MyScreenManager(ScreenManager):
def initialize(self): # I know this is not necessary,
# but in my real code, i have to proceed like this.
# ... (some instructions)
pass
class Menu1(Screen):
def add_label(self):
self.add_widget(Label(text="Hello", color=(1,0,0,1)))
class Menu2(Screen):
def add_label(self):
self.add_widget(Label(text="Hello", color=(1,0,0,1)))
Builder.load_file("debug.kv")
class MyAppli(App):
def build(self):
Window.clearcolor = (1,1,1,1)
return MyScreenManager().initialize()
if __name__ == '__main__':
MyAppli().run()
debug.kv:
#:kivy 1.9.1
<MyScreenManager>:
Menu1:
id: menu1
Menu2:
id: menu2
<Menu1>:
name: "screen1"
BoxLayout:
Label:
text:"Screen 1"
color:(1,0,0,1)
Button:
text:"Add a label"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.ids.menu1.add_label()
Button:
text:"Go to screen 2"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.current = "screen2"
<Menu2>:
name: "screen2"
BoxLayout:
Label:
text:"Screen 2"
color:(1,0,0,1)
Button:
text:"Add a label"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.ids.menu2.add_label()
Button:
text:"Go to screen 1"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.current = "screen1"
请在 MyScreenManager class 中执行以下操作。具体请参考示例
片段
class MyScreenManager(ScreenManager):
def __init__(self, **kwargs):
super(MyScreenManager, self).__init__(**kwargs)
self.initialize()
def initialize(self): # I know this is not necessary,
# but in my real code, i have to proceed like this.
# ... (some instructions)
print("MyScreenManager.initialize called")
...
class MyAppli(App):
def build(self):
Window.clearcolor = (1, 1, 1, 1)
return MyScreenManager()
例子
debug.py
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.label import Label
from kivy.lang import Builder
class MyScreenManager(ScreenManager):
def __init__(self, **kwargs):
super(MyScreenManager, self).__init__(**kwargs)
self.initialize()
def initialize(self): # I know this is not necessary,
# but in my real code, i have to proceed like this.
# ... (some instructions)
print("MyScreenManager.initialize called")
class Menu1(Screen):
def add_label(self):
self.add_widget(Label(text="Hello", color=(1,0,0,1)))
class Menu2(Screen):
def add_label(self):
self.add_widget(Label(text="Hello", color=(1,0,0,1)))
Builder.load_file("debug.kv")
class MyAppli(App):
def build(self):
Window.clearcolor = (1, 1, 1, 1)
return MyScreenManager()
if __name__ == '__main__':
MyAppli().run()
debug.kv
#:kivy 1.10.0
<MyScreenManager>:
Menu1:
id: menu1
Menu2:
id: menu2
<Menu1>:
name: "screen1"
BoxLayout:
Label:
text:"Screen 1"
color:(1,0,0,1)
Button:
text:"Add a label"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.ids.menu1.add_label()
Button:
text:"Go to screen 2"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.current = "screen2"
<Menu2>:
name: "screen2"
BoxLayout:
Label:
text:"Screen 2"
color:(1,0,0,1)
Button:
text:"Add a label"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.ids.menu2.add_label()
Button:
text:"Go to screen 1"
size:(200,50)
size_hint:(None,None)
background_color:(1,0,0,1)
on_press:
root.manager.current = "screen1"
输出
Output Apps Running