首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用remove_widget()函数?

如何使用remove_widget()函数?
EN

Stack Overflow用户
提问于 2018-08-27 07:30:58
回答 1查看 447关注 0票数 0

我有这个密码。

代码语言:javascript
复制
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty


class Temp(BoxLayout):
    def __init__(self, iid):
        BoxLayout.__init__(self)
        self.id = str(iid)

    def remove_content(self, iid):
        #How me need use remove_widget() function?
        #self.ids['tmp'].remove_widget(?)

class ScreenApp(BoxLayout):
    def __init__(self):
        BoxLayout.__init__(self)
        self.idsum = 0
        self.idsum+=1
        self.ids['contents'].add_widget(Temp(iid = self.idsum))
        self.idsum+=1
        self.ids['contents'].add_widget(Temp(iid = self.idsum))

    def add_content(self):
        self.idsum+=1
        self.ids['contents'].add_widget(Temp(iid = self.idsum))

class MainApp(App):
    def build(self):
        return ScreenApp()

if __name__ == "__main__":
    MainApp().run()

还有这个

代码语言:javascript
复制
<Temp@BoxLayout>
    id: tmp
    Button:
        id: idti
        text: "-"
        on_press: root.remove_content(id)
    Label:
        id: idlbl
        text: "Temp"

<ScreenApp>:
    BoxLayout:
        orientation: "vertical"

        BoxLayout:
            id: contents
            orientation: "vertical"

        Button:
            text: "+"
            on_press: root.add_content()

我希望在单击按钮时删除小部件,然后将窗口小部件上升到远程小部件TM的位置,而不留下空空间。提前谢谢你。再多说几句就可以消除弹出式了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-27 14:54:45

使用self.ids.contents.remove_widget(instance)删除对象的实例。详情请参阅有关解释及例子。

kv文件

  1. 将动态类、<Temp@BoxLayout>替换为类规则、<Temp>:
  2. 删除id: tmp,因为它不需要
  3. root.remove_content(id)替换为app.root.remove_content(root),因为我们将方法移到ScreenApp()类中,因为我们已经有了add_content()方法。
  4. 我们不是将id作为参数传递,而是传递root,即要删除的Temp对象的实例。
  5. text: 'Temp'替换为root.text以实现可视化。
  6. 删除了类规则下的第一个BoxLayout:<ScreenApp>:,因为它已经是一个BoxLayout,并不需要另一个BoxLayout i.e.nested BoxLayouts。

Python代码

  1. text作为参数添加到类Temp()的构造函数方法中。
  2. 为赋值添加self.text = text
  3. 实例化text='Temp' + str(self.idsum)对象时添加了Temp

示例

main.py

代码语言:javascript
复制
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout


class Temp(BoxLayout):
    def __init__(self, iid, text, **kwargs):
        super(Temp, self).__init__(**kwargs)
        self.id = str(iid)
        self.text = text


class ScreenApp(BoxLayout):
    def __init__(self):
        BoxLayout.__init__(self)
        self.idsum = 0
        self.idsum += 1
        self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))
        self.idsum += 1
        self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))

    def add_content(self):
        self.idsum+=1
        self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))

    def remove_content(self, instance):
        self.ids.contents.remove_widget(instance)


class MainApp(App):
    def build(self):
        return ScreenApp()


if __name__ == "__main__":
    MainApp().run()

main.kv

代码语言:javascript
复制
#:kivy 1.11.0

<Temp>:
    text: 'Temp'
    Button:
        id: idti
        text: "-"
        on_press: app.root.remove_content(root)
    Label:
        id: idlbl
        text: root.text

<ScreenApp>:
    orientation: "vertical"

    BoxLayout:
        id: contents
        orientation: "vertical"

    Button:
        text: "+"
        on_press: root.add_content()

输出

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52034573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档