Ich versuche, einen Bildschirm-Manager von Schaltflächen in einer separaten Klasse zu steuern, aber ich kann nicht herausfinden, was auf der Schaltfläche on_press:
Anweisungen gesetzt werden.Python Kivy Screen Manager wiget Bereich
Kivy Datei:
<HeaderSection>:
anchor_x: 'center'
anchor_y: 'top'
BoxLayout:
orientation: 'horizontal'
size_hint: 1, .1
id: header
Label:
text: 'My App'
<ContentSection>:
anchor_x: 'center'
anchor_y: 'center'
ScreenManager:
size_hint: 1, .8
Screen:
name: 'home'
Label:
text: 'First screen'
Screen:
name: 'second'
Label:
text: 'Second screen'
Screen:
name: 'third'
Label:
text: 'Third screen'
<FooterSection>:
anchor_x: 'center'
anchor_y: 'bottom'
BoxLayout:
orientation: 'horizontal'
size_hint: 1, .1
Button:
text: 'first'
on_press: root.ContentSection.manager.current = 'first'
Button:
text: 'second'
on_press: root.current = 'second'
Button:
text: 'third'
on_press: ContentSection.ScreenManager.current = 'third'
Python-Datei:
from kivy.app import App
from kivy.lang import Builder
Builder.load_file('MyApp.kv')
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.label import Label
from kivy.uix.image import Image
# Declare sections
class HeaderSection(AnchorLayout):
pass
class ContentSection(AnchorLayout):
def build(self):
# Create the screen manager
sm = ScreenManager()
sm.add_widget(FirstScreen(name='first'))
sm.add_widget(SecondScreen(name='second'))
sm.add_widget(ThirdScreen(name='third'))
return sm
class FooterSection(AnchorLayout):
pass
class MyAppApp(App):
def build(self):
#Create the sections
fl = FloatLayout()
hs = HeaderSection()
cs = ContentSection()
fs = FooterSection()
fl.add_widget(hs)
fl.add_widget(cs)
fl.add_widget(fs)
return fl
if __name__ == '__main__':
MyAppApp().run()
habe ich versucht, verschiedene Methoden:
on_press: root.parent.ContentSection.ScreenManager.current = 'home'
on_press: root.parent.ContentSection.manager.current = 'home'
on_press: root.ContentSection.manager.current = 'home'
Ich mag es fühlen, ist ein s Bewältigung Problem, sagen Fehler Dinge wie:
AttributeError: 'FooterSection' object has no attribute 'ContentSection'
Also meine App die folgende Hierarchie:
FloatLayout
HeaderSection
ContentSection
ScreenManager
FirstScreen
SecondScreen
ThirdScreen
FooterSection
Button for FirstScreen
Button for SecondScreen
Button for ThirdScreen
Also muss ich eine Ebene in FloatLayout durchqueren, dann Drilldown in ContentSection den Bildschirm zugreifen Manager.
Dies funktioniert, hatte ich ein ähnliches Verfahren zu arbeiten, bevor aber all Mein Kivy-Code war in meiner Python-Datei. Frage: Warum steht der 'root.ids.manager' für was steht der 'ids'? –
'.ids' ist, wo ein Root-Widget seine IDs speichert. – ebuenger