如何从该窗口小部件中删除添加的窗口小部件。我有意义吗?希望是的,呵呵呵......
无论如何,简单的代码只包含按钮和标签。 我的目标是,如果我点击添加按钮,它将显示小部件,这是一个标签&按钮。如果我想删除小部件,我只需单击该小部件中的关闭按钮。
但它没有关闭,已经两天了,我找不到问题是什么,它没有给我任何错误。
谢谢你们。
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 :(得分: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 ,所以你可以随时切换到不同的屏幕,而不是去做这个奇怪的小部件删除事情......
我希望这能解决大部分问题