Kivy:点击BoxLayout1按钮向BoxLayout2添加Widget未显示求助
Kivy Widget添加后不显示的问题解决方法
嘿,我来帮你搞定这个Kivy的问题!从你给出的代码片段来看,有几个关键问题导致你添加的Widget没在屏幕上显示,咱们一步步来修正:
问题分析
- 判断条件搞反了:你的需求是当TextInput未输入内容时添加Widget,但代码里写的是
if self.ids.textinput.text!=''——这只会在输入内容时执行,完全和需求相反。 - 只创建了BoxLayout2实例,没添加到界面:你调用
BoxLayout2()只是新建了一个布局对象,但这个对象并没有被添加到当前的界面布局树里,自然不会显示。而且通常你应该操作已经存在于界面上的BoxLayout2实例,而不是新建一个。 - 缺少实际添加Widget的逻辑:你只是创建了BoxLayout2,但没有往里面添加具体的Widget(比如按钮、标签之类的)。
修正后的完整代码示例
main.py
from kivy.app import App from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label class BoxLayout1(BoxLayout): def Search(self): # 修正判断条件:TextInput为空时执行 if self.ids.textinput.text == '': # 获取界面上已存在的BoxLayout2实例(假设根布局里有这个实例,且kv里给它加了id) box_layout_2 = App.get_running_app().root.ids.boxlayout2 # 创建要添加的Widget,比如一个标签 new_widget = Label(text="新添加的Widget") # 将Widget添加到BoxLayout2中 box_layout_2.add_widget(new_widget) class BoxLayout2(BoxLayout): pass class MyApp(App): def build(self): return BoxLayout() if __name__ == '__main__': MyApp().run()
对应的kv文件(比如myapp.kv,注意文件名要和App类名对应,小写加kv)
<BoxLayout>: orientation: 'vertical' BoxLayout1: id: boxlayout1 TextInput: id: textinput hint_text: "输入内容..." Button: text: "添加Widget" on_press: boxlayout1.Search() BoxLayout2: id: boxlayout2 orientation: 'vertical' Label: text: "BoxLayout2区域"
关键修改点说明
- 修正判断逻辑:把原代码的非空判断改成空值判断,符合你的需求。
- 获取已有布局实例:通过
App.get_running_app().root.ids.boxlayout2拿到界面上已经存在的BoxLayout2对象,而不是新建一个。 - 明确添加Widget的步骤:先创建具体的Widget(比如Label、Button),再调用
add_widget()方法把它加入到BoxLayout2中。
这样修改后,当你点击按钮且TextInput为空时,就能在BoxLayout2里看到新添加的Widget啦!
内容的提问来源于stack exchange,提问作者ChrisKari
相关产品推荐
相关产品推荐

