【问题标题】:Not able to remove Widgets which were dynamically added to screen in Kivy无法删除在 Kivy 中动态添加到屏幕的小部件
【发布时间】:2021-10-17 14:57:41
【问题描述】:

当在文本输入中键入某些文本时,我正在尝试动态添加按钮。为了在KIvy中实现搜索选择组合框。 即使我可以在输入某些文本时添加小部件,但在删除输入的文本时无法删除这些添加的小部件。

import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix import dropdown
from kivy.uix.textinput import TextInput
# from kivymd.app import MDApp
kivy.require('1.9.0')
from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
from kivy.base import runTouchApp
from kivy.uix.screenmanager import ScreenManager,Screen


class ScreenOne(Screen):
    def change_text(self,root,val):
        pass
    def create_dropdown(self,root,value):
        print("value is :" + value)
        if value == "":
            result = ""
            print(root.ids)
        else:
            lang = ["aa","aaa", "bsa","cds","dds", "ddyus"]
            result = list(filter(lambda x: x.startswith(value), lang))
            for i in range (0,len(result)):
                self.textinput = Button()
                self.textinput.id = 'textinput'+ str(i)
                self.textinput.text = result[i]
                self.textinput.size_hint= (.3, .06)
                self.textinput.font_size= '14sp'
                self.textinput.pos_hint= {'center_x': 0.5, 'center_y': 0.8-(i+1)/10, }
                root.ids.screen1.add_widget(self.textinput)

sm = Builder.load_string("""


ScreenManager:
    ScreenOne:
        id: screen1
        name: "screen_one"
        TextInput:
            id: input1
            hint_text:'Select input Language'
            size_hint: (.3,.06)
            font_size: '14sp'
            pos_hint:{'center_x':0.5,'center_y':0.8,}
            on_text: root.ids.screen1.create_dropdown(root,input1.text)
            
""")
class demo(App):
    def build(self):
        return sm

app=demo()
# app.run()
runTouchApp(sm)

在 UI 中输入 a 时,请参见下图

但是当我清除输入文本时,我仍然能够看到之前添加的小部件

当输入框中输入的文本被清除时,我需要一些逻辑来删除添加的小部件。

【问题讨论】:

    标签: kivy python-3.7


    【解决方案1】:

    尝试添加这个:

    result = list(filter(lambda x: x.startswith(value), #from your cod
    lang)) #from your code
    if result == [] :
        for widget in root.ids.screen1.children:
            root.ids.screen1.remove_widget(widget)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多