【问题标题】:How to used add_widget on a BoxLayout created on kvlang with kivy?如何在使用 kivy 在 kvlang 上创建的 BoxLayout 上使用 add_widget?
【发布时间】:2019-01-29 02:48:11
【问题描述】:

我需要通过 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 文件

<Screen1>:

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

【问题讨论】:

  • 我认为你需要self.ids.bx.add_widget(bt)

标签: python button kivy


【解决方案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()

【讨论】:

  • 成功了!您知道是否有办法选择要添加按钮的位置?就像,我有一个带有[label','label'] 的boxlayout,我不想在标签中间放置一个按钮,得到[label','button','label']
  • 您可以将index 添加到add_widget(),例如add_widget(widget, index=1)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多