0
別のクラスのボタンからスクリーンマネージャを制御しようとしていますが、ボタンon_press:
のステートメントで何を設定するのか分かりません。Python Kivyスクリーンマネージャwigetスコープ
Kivyファイル:
<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のファイル:
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()
私はさまざまな方法を試してみました:
on_press: root.parent.ContentSection.ScreenManager.current = 'home'
on_press: root.parent.ContentSection.manager.current = 'home'
on_press: root.ContentSection.manager.current = 'home'
それがSであるように私は感じます
AttributeError: 'FooterSection' object has no attribute 'ContentSection'
だから私のアプリは、次の階層があります:
FloatLayout
HeaderSection
ContentSection
ScreenManager
FirstScreen
SecondScreen
ThirdScreen
FooterSection
Button for FirstScreen
Button for SecondScreen
Button for ThirdScreen
だから私は画面にアクセスするContentSectionにドリルダウンし、その後、FloatLayoutにレベルをアップトラバースする必要がある問題を対処、エラーがのようなものを言いますマネージャー。
これは動作しますが、私は同様の方法は、前に働いたがすべてしていました私のkivyコードは私のpythonファイルにありました。質問:なぜ 'root.ids.manager'ですか?'ids 'は何を表していますか? –
'.ids'は、ルートウィジェットがそのIDを格納する場所です。 – ebuenger