Как использовать add_widget для BoxLayout, созданного на kvlang с kivy? - PullRequest
0 голосов
/ 29 января 2019

Мне нужно добавить виджет по коду Python на экран, созданный в kvlang.Но когда я пытаюсь добавить его, возвращается, что мой BoxLayout не существует.

Я думаю, что это происходит потому, что .py код запускается перед kvlang, потому что когда я использую on_enter: print('a'), он возвращает ошибку и не печатает a.

Как я могу это сделать?

.py код

import kivy
from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.button import Button

class Screen1(Screen):

    def __init__(self):

        bt = Button()
        bt.text = 'def'
        self.bx.add_widget(bt)

class rootApp(App):

    def build(self):

        return Screen1()

rootApp().run()

.kv file

<Screen1>:

    BoxLayout:
        id:bx
        Button:
            text:'abc'

1 Ответ

0 голосов
/ 29 января 2019

Вам необходимо использовать ids для доступа к bx.Вам также необходимо вызвать метод __init__() суперкласса.Как это:

import kivy
from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.button import Button

class Screen1(Screen):

    def __init__(self, **kwargs):
        super(Screen1, self).__init__(**kwargs)
        bt = Button()
        bt.text = 'def'
        self.ids.bx.add_widget(bt)

class rootApp(App):

    def build(self):
        return Screen1()

rootApp().run()
...