Я новичок в kivy и хочу изменить свой экран, щелкнув изображение. Я использовал ButtonBehavior и вызвал метод on_press моего класса ImageButton, но я не могу понять, какой код поместить. Я попробовал on_press: screen_manager.current = 'window1' в моем файле kivy, но он не работает

Код Python

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image
from kivy.uix.behaviors import ButtonBehavior


class Window1(Screen):
    pass

class Window2(Screen):
    pass

class WindowManager(ScreenManager):
    pass

class ImageButton(ButtonBehavior, Image):
    def on_press(self):
        # what to call

class Phone(FloatLayout):
    pass


class MyApp(App):
    def build(self):
        return Phone()

if __name__ == '__main__':
    MyApp().run()

kv файл

<Phone>:
    AnchorLayout:
        anchor_x: 'center'
        anchor_y: 'top'
        WindowManager:
            id: screen_manager
            size_hint: 1, 0.9
            anchor_y: 'top'
            transition: FadeTransition()
            Window1:
            Window2:

    AnchorLayout:
        anchor_x: 'center'
        anchor_y: 'bottom'
        BoxLayout:
            canvas:
                Color:
                    rgba: 228, 241, 254, 1
                Rectangle:
                    size: self.size
            orientation: 'horizontal'
            size_hint: 1, .1
            ImageButton:
                source: 'pic1.png'
                on_press: self.on_press()
            ImageButton:
                source: 'pic2.png'
                on_press: self.on_press()


<Window1>:
    name: 'window1'
    Label:
        text: 'Window1'
<Window2>:
    name: 'window2'
    Label:
        text: 'Window2'
1
blufips 13 Июн 2020 в 02:49

1 ответ

Лучший ответ

Кто-нибудь поможет мне в этом .. то, что мне не хватает, есть в моем файле kv, я должен положить

on_press: app.root.ids._screen_manager.current = 'window1'

Вот объяснение

Когда код kv разбирается, поля id переходят в dict с именем ids, в котором хранятся указатели на объекты виджета.

Каждое правило kivy имеет отдельное пространство имен для детей.

Разбивая это:

App.root.ids.screen_manager

Приложение это ваше приложение

Root - это корневой виджет, Телефон

Ids - это набор идентификаторов, определенных на корневом уровне

Кредит для Эллиота Гарбуса

0
blufips 15 Июн 2020 в 17:10