如何删除该小部件中的已添加小部件?
How to remove the Added widget within that widget?
如何从该小部件中删除添加的小部件。我说的有道理吗?希望是的,呵呵...
无论如何,简单的代码只包含按钮和标签。
我的目标是,如果我单击添加按钮,它将显示作为标签和按钮的小部件。如果我想删除小部件,只需单击该小部件中的关闭按钮即可。
但它没有关闭,已经两天了,我找不到问题所在,也没有给我任何错误。
谢谢大家。
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()
您的代码中有一些错误,首先,您正在测试 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,所以你可以在需要时切换到不同的屏幕而不是这样做奇怪的小部件删除事情...
我希望这可以解决大部分问题
如何从该小部件中删除添加的小部件。我说的有道理吗?希望是的,呵呵...
无论如何,简单的代码只包含按钮和标签。 我的目标是,如果我单击添加按钮,它将显示作为标签和按钮的小部件。如果我想删除小部件,只需单击该小部件中的关闭按钮即可。
但它没有关闭,已经两天了,我找不到问题所在,也没有给我任何错误。
谢谢大家。
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()
您的代码中有一些错误,首先,您正在测试 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,所以你可以在需要时切换到不同的屏幕而不是这样做奇怪的小部件删除事情...
我希望这可以解决大部分问题