【问题标题】:How to remove the Added widget within that widget?如何删除该小部件中添加的小部件?
【发布时间】:2016-12-28 06:50:26
【问题描述】:

如何从该小部件中删除添加的小部件。我有什么意义吗?希望是的,呵呵……

无论如何,简单的代码仅由按钮和标签组成。 我的目标是,如果我单击添加按钮,它将显示作为标签和按钮的小部件。如果我想删除小部件,我只需单击该小部件中的关闭按钮。

但它没有关闭,已经两天了,我找不到问题所在,它没有给我任何错误。

谢谢大家。

from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder

kv_file = Builder.load_string('''
<Screen1>:
    BoxLayout:
        Button:
            on_release: root.add_button(True)
            text: 'ADD'
            size_hint: .2,.2

<Layout1>:
    BoxLayout:
        pos: self.x,300
        size_hint: .5,.3
        Label:
            text: 'THIS IS A ADDED WIDGET'
        Button:
            text: 'Close'
            on_release: root.closeBTN()
    ''')

class Layout1(FloatLayout):
    def closeBTN(self):
        AddWidget_Layout1().addEmps(True)

class AddWidget_Layout1(Widget):
    def __init__(self, **kwargs):
        super(AddWidget_Layout1,self).__init__(**kwargs)
        self.count = 0
        self.layout1 = Layout1()

    def addEmps(self,xadd):
        if xadd == 1:
            self.add_widget(self.layout1)
        elif xadd == True:
            self.remove_widget(self.layout1)


class Screen1(Screen,AddWidget_Layout1):
    def add_button(self,*args):
        self.count += 1
        print
        if self.count == 1:
            self.addEmps(1)

class projectApps(App):
    def build(self):
        return SM

SM = ScreenManager()
SM.add_widget(Screen1())

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

【问题讨论】:

    标签: python-3.x widget kivy


    【解决方案1】:

    您的代码中有一些错误,首先,您正在测试 xadd 的 1 和 True,这有点像:

    def addEmps(self,xadd):
        if xadd:
            self.add_widget(self.layout1)
        else: #was elif xadd == True which cannot happen...
            self.remove_widget(self.layout1)
    

    我也会改变:

    def closeBTN(self):
        #AddWidget_Layout1().addEmps(True) #BAD! will create a new instance
        self.parent.addEmps(False) # this looks better
    

    最后,我不知道你为什么要这样做,因为你已经在使用 ScreenManager,所以你可以在需要时切换到不同的屏幕,而不是做这个奇怪的小部件移除事情。 ..

    我希望这能解决大部分问题

    【讨论】:

    • 这里的想法是,与其为表单创建另一个屏幕,不如创建一个小部件表单。但问题是,如果变量 xadd 为 True,则不会删除小部件。如果它在哪里显示错误/错误,我可能会找到解决方案。但没有显示错误。
    • @azura - 看看我的答案,python 中的 1 和 True 相同,使用 False 删除布局...
    • 很好用,这就是我需要的,亲爱的.... 之前,我确实将 True 更改为 False,但它不起作用。我没有注意到self.parent,我需要检查有关self.parent 的python 文档。我只是在徘徊,python 怎么知道addEmps 所在的函数?其中班级/父母。生病肯定需要检查 python 文档......太棒了!谢谢 Yoav!
    猜你喜欢
    • 1970-01-01
    • 2019-11-24
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2016-01-06
    相关资源
    最近更新 更多