python - 当用户想要在 kivy 中显示小部件
问题描述
这是一个简单的程序,但我找不到让它工作的方法。当用户按下位于 boxlayout1 中的按钮(并且没有在 textinput 中写任何内容)时,我只想在 boxlayout2 中添加一个小部件。小部件不显示在屏幕中。我该怎么办?
主文件
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
class BoxLayout1(BoxLayout):
def Search(self):
if self.ids.textinput.text!='':
BoxLayout2()
class BoxLayout2(BoxLayout):
def Print(self):
self.add_widget(Button(text='hello'))
class TestApp(App):
pass
TestApp().run()
这是我的 kivy 代码
测试.kv
<BoxLayout1>:
BoxLayout:
Label:
text:'Hello'
TextInput:
id: textinput
Button:
text: 'write'
on_press: root.Search()
BoxLayout:
orientation: 'vertical'
BoxLayout1:
BoxLayout2:
我看到了我想要的演示文稿布局,但找不到按钮。
解决方案
为了清楚起见,让我们跟随您编写的应用程序的流。
- 它创建一个 BoxLayout 并将 BoxLayout1 和 BoxLayout2 放入其中,第二个没有任何内容。当您点击写入时,应用程序会检查文本框的内容,如果有效,则调用 BoxLayout2 的构造函数!现在它创建了这个类的一个实例,但不保留它的引用,所以它会立即被丢弃。现在你想要的是调用一个当前存在的实例的函数,而不是创建另一个。这是代码:
Python:
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
class BoxLayout1(BoxLayout):
def Search(self):
if self.ids.textinput.text!='':
self.parent.ids.bxl2.addButton()
# BoxLayout2()
class BoxLayout2(BoxLayout):
def addButton(self):
button=Button(text='hello')
self.add_widget(button)
基维语言:
<BoxLayout1>:
BoxLayout:
Label:
text:'Hello'
TextInput:
id: textinput
Button:
text: 'write'
on_press: root.Search()
BoxLayout:
orientation: 'vertical'
BoxLayout1:
BoxLayout2:
id:bxl2
推荐阅读
- reactjs - 为什么 webpack 的 CSS 加载器不起作用?
- laravel - 如何使用 HasMany 显示数据数据表 Laravel
- angular - 从子组件访问数据到父组件ngOnit Angular 4
- php - 如何将值传递给来自 laravel Blade 的 vue 数据?
- java - 如何用随机数填充数组并冻结/保护数组内的数字
- node.js - 如果我创建一个查询字符串并传递给 find() 它不会给出错误而是返回空值
- python - Python3:如何将字符串转换为“\x00....”
- java - Android Retrofit with Rx 获取其他 http 代码
- swift - 通过闭包初始化属性
- python-3.x - Python shapely:如何仅对形状的内部区域进行三角测量