Как использовать событие on_press для кнопки, которая была добавлена ​​динамически - PullRequest
0 голосов
/ 26 января 2020

У меня есть следующий код, где Button добавляется к Grid Layout каждый раз, когда вызывается метод test_press. Я хотел бы иметь возможность переключаться на другой экран при нажатии одной из этих кнопок, но я бы хотел, чтобы каждый Button, созданный для go, отображал другой экран - к какому экрану он переходит. не важно в данный момент. Как бы я go о реализации чего-то подобного?

from kivy.uix.scrollview import ScrollView
from kivy.uix.button import Button
from kivy.core.window import Window
from kivymd.theming import ThemeManager
import kivy
from kivy.app import App
from kivy.properties import ObjectProperty, StringProperty, NumericProperty, ListProperty
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.uix.label import Label

Window.clearcolor = (1,1,1,1)

class Finder(Screen):
    layout_profiles = ObjectProperty(None)

    def test_press(self):
        Btn1 = Button(size_hint_y=None, height=75)
        self.layout_profiles.add_widget(Btn1)

class MyApp(App):
    theme_cls = ThemeManager()

    def build(self):
        kv = Builder.load_file("kivy.kv")
        sm = WindowManager()

        screens = [Finder(name="finder")]
        for screen in screens:
            sm.add_widget(screen)

        sm.current = "information"
        return sm


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

kv file:

<Finder>:
    name: "finder"
    layout_profiles: layout_profiles

    NavigationLayout:
        id: nav_layout
        MDNavigationDrawer:
            NavigationDrawerIconButton:
                text: "Test"
                on_release: app.root.current = "login"

        FloatLayout:
            MDToolbar:
                pos_hint: {'top': 1}
                md_bg_color: 0.2, 0.6, 1, 1
                left_action_items: [['menu', lambda x: root.ids.nav_layout.toggle_nav_drawer()]]

            Label:
                background_normal: ""
                background_color: 1, 1, 1, 1
                color: 0, 0, 0, 1
                text: "Holding text"
                font_size: 20
                multiline: True
                pos_hint: {"x": 0.125, "y": 0.7}
                text_size: self.width, None
                size_hint: 0.75, None
                height: self.texture_size[1]
                halign: "center"

            ScrollView:
                size_hint: 0.95, 0.6
                pos_hint: {"x": 0.025, "top": 0.65, "bottom": 0.2}
                do_scroll_x: False
                GridLayout:
                    cols: 1
                    id: layout_profiles
                    size_hint_y: None
                    spacing: 10
                    height: self.minimum_height
                    canvas:
                        Color:
                            rgba: (1, 1, 1, 1)
                        Rectangle:
                            size: self.size
                            pos: self.pos

            BoxLayout:
                cols: 1
                Button:
                    text: "Add widget"
                    size_hint: 0.5, 0.1
                    pos_hint: {"x": 0.5, "top": 0.1}
                    on_release: root.test_press()

Также извиняюсь, если название (или описание!) Не так ясно, я не знал, как его описать.

«Добавить виджет» Button как раз для mimi c конечной цели, где кнопки будут добавлены в зависимости от некоторой информации, поступающей из базы данных.

...