如何删除该小部件中的已添加小部件?

时间:2016-12-28 06:50:26

标签: python-3.x widget kivy

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

无论如何,简单的代码只包含按钮和标签。 我的目标是,如果我点击添加按钮,它将显示小部件,这是一个标签&按钮。如果我想删除小部件,我只需单击该小部件中的关闭按钮。

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

谢谢你们。

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()

1 个答案:

答案 0 :(得分:0)

您的代码中有一些错误,首先,您正在测试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 ,所以你可以随时切换到不同的屏幕,而不是去做这个奇怪的小部件删除事情......

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