我的意图是在我们的窗口右边有一个布局,在右边有一个ScreenManager。两者的布局不同,但是在同一主应用程序中。我似乎无法在“屏幕管理器”上的布局更改屏幕上有一个按钮。
这是我的kv代码:
<MainWindow>:
rows: 1
columns: 2
LeftBox:
RightBox:
<LeftBox>:
Button:
text: "Screen 1"
on_press:
app.root.ids.scr.switch_to(screen=Screen1)
Button:
text: "Screen 2"
<RightBox>:
ScrMng:
<ScrMng>:
id: scr
Screen1:
Button:
text: "Hello"
Screen2:
Button:
text: "World"
这是我的python代码:
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivy.uix.textinput import TextInput
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
class MainWindow(GridLayout):
pass
class ScrMng(ScreenManager):
pass
class LeftBox(BoxLayout):
pass
class RightBox(BoxLayout):
pass
class Screen1(Screen):
pass
class Screen2(Screen):
pass
class newtestApp(App):
def build(self):
return MainWindow()
k = newtestApp()
k.run()
我得到的错误是
AttributeError:“超级”对象没有属性“
__getattr__
”
答案 0 :(得分:0)
在AttributeError: 'super' object has no attribute '__getattr__'
之前有一个KeyError: 'scr'
app.root.ids.scr.switch_to(screen=Screen1)
id: rbox
中的实例化RightBox:
小部件添加<MainWindow>:
,以便我们可以使用id: scr
访问ids.rbox.ids.scr
id: scr
从类规则<ScrMng>:
移动到实例化规则ScrMng:
中的<RightBox>:
name: 'screen1'
和name: 'screen2'
添加Screen1:
和Screen2:
。app.root.ids.scr.switch_to(screen=Screen1)
替换为app.root.ids.rbox.ids.scr.current = 'screen1'
ScreenManager: current vs switch_to
注意,该方法将屏幕添加到ScreenManager实例中,如果您的屏幕已经被使用,则不应使用 添加到此实例。要切换到已添加的屏幕, 您应该使用current属性。
switch_to(screen, **options)
将新屏幕添加到ScreenManager并切换到它。以前的 屏幕将从儿童身上移开。选项是过渡 在动画发生之前将要更改的选项。
#:kivy 1.11.0
<MainWindow>:
rows: 1
columns: 2
LeftBox:
RightBox:
id: rbox
<LeftBox>:
Button:
text: "Screen 1"
on_press:
app.root.ids.rbox.ids.scr.current = 'screen1'
Button:
text: "Screen 2"
on_press:
app.root.ids.rbox.ids.scr.current = 'screen2'
<RightBox>:
ScrMng:
id: scr
<ScrMng>:
Screen1:
name: 'screen1'
Button:
text: "Hello"
Screen2:
name: 'screen2'
Button:
text: "World"