2016-12-28 114 views
0

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

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

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

谢谢你们。

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

回答

0

你有一些错误在你的代码中,首先,要测试XADD 1和真实是有点儿同一件事:

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,所以你可以随时切换到不同的屏幕,而不必做t他怪异的小工具去除的事情...

我希望这将清除大部分的问题

+0

这里的想法是,而不是为表单创建另一个屏幕,生病只是创建窗口小部件表格。 但事情是,如果变量xadd是真的,小部件不会被删除。如果它在哪里显示错误/错误,我可能会找到解决方案。但没有错误显示。 – azura

+0

@azura - 看看我的anwser,1和True在Python中使用False删除布局... –

+0

伟大的工作,这就是我需要的,甜蜜....之前,我确实改变了真正的假,但它没有工作。我没有注意到self.parent,我需要检查有关self.parent的Python文件..即时通讯只是徘徊如何python知道功能addEmps位于?其中班级/家长。生病肯定需要检查python文档...太棒了!谢谢Yoav! – azura