如何在使用Kivy在kvlang上创建的BoxLayout上使用add_widget?

时间:2019-01-29 02:48:12

标签: python button kivy boxlayout

我需要在我的kvlang创建的屏幕上通过python代码添加小部件。但是,当我尝试添加它时,它返回我的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文件

<Screen1>:

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

1 个答案:

答案 0 :(得分:1)

您需要使用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()