如何删除 kivy 中的小部件?

Posted

技术标签:

【中文标题】如何删除 kivy 中的小部件?【英文标题】:How can I remove a widget in kivy? 【发布时间】:2016-11-24 06:32:20 【问题描述】:

我正在尝试做与添加这些小部件相同的操作,但没有成功。 我正在使用 kv 语言和绑定功能。使用下面的代码可以动态添加按钮,但无法删除它们。

.py

class PrimeiroScreen(Screen):
    def __init__(self, **kwargs):
        self.name = 'um'
        super(Screen,self).__init__(**kwargs)


    def fc2(self):
        btn = Button(text="Botão",size_hint=(.1,.1))
        self.ids.grade2.add_widget(btn)     
        btn.bind(on_press=self.printa)

    def printa(self,*args):
        #btn2 = Button(text="Btn2",size_hint=(.1,.1))#I can add another btn succesfully
        self.ids.grade2.add_widget(btn2)#but I can do the same by this way
        self.remove_widget(btn)
        grade2.remove_widget(self.btn)

和.kv

<RootScreen>:
    PrimeiroScreen:

<PrimeiroScreen>:
    GridLayout:
        cols: 1
        size_hint: (.5,1)
        id: grade
        Button:
            text: "hi!"
            on_press: root.fc2()

    StackLayout:
        orientation: 'bt-rl'
        GridLayout:
            cols: 2
            size_hint: (.5,1)
            id: grade2

有人知道我犯的错误吗? Python 向我显示以下消息:

self.remove_widget(btn)
NameError: global name 'btn' is not defined

【问题讨论】:

widget_to_remove.parent.remove_widget(widget_to_remove) 【参考方案1】:

更改btn = Button(text="Botão",size_hint=(.1,.1))self.btn = Button(text="Botão",size_hint=(.1,.1)) 所以你让它成为一个类属性。

然后像这样删除它self.remove_widget(self.btn)

【讨论】:

我在这里写过它不好,但是我重新编写了我的代码,我发现我没有调用所有“btn = self.btn”。这样,我做了“self.btn.bind(on_press=self.fc)”和“self.ids.grade2.add_widget(self.btn)”。非常感谢,我很抱歉我的疏忽。效果很好。 避免创建另一个帖子。如果我想在其他类中添加或删除小部件,我该怎么做?我正在尝试与普通功能相同的方式,因为我在更改文本标签的功能中得到了它。是不是也一样? @victorcd 避免做出不符合问题的答案。你eiter用你想要的例子来更新问题,或者提出一个新问题:)

以上是关于如何删除 kivy 中的小部件?的主要内容,如果未能解决你的问题,请参考以下文章

如何引用似乎超出范围的小部件 - 改编的 kivy/examples/demo/images

如何禁用 Kivy 中的小部件?

Kivy 如何访问子小部件中的小部件

如何清除 kivy 中的小部件?

如何从 kivy 小部件画布中删除特定说明?

pyqt - 如何从状态栏中的小部件中删除边框?