如何使用 remove_widget() 函数?
how do I use the remove_widget() function?
我有这个代码。
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
class Temp(BoxLayout):
def __init__(self, iid):
BoxLayout.__init__(self)
self.id = str(iid)
def remove_content(self, iid):
#How me need use remove_widget() function?
#self.ids['tmp'].remove_widget(?)
class ScreenApp(BoxLayout):
def __init__(self):
BoxLayout.__init__(self)
self.idsum = 0
self.idsum+=1
self.ids['contents'].add_widget(Temp(iid = self.idsum))
self.idsum+=1
self.ids['contents'].add_widget(Temp(iid = self.idsum))
def add_content(self):
self.idsum+=1
self.ids['contents'].add_widget(Temp(iid = self.idsum))
class MainApp(App):
def build(self):
return ScreenApp()
if __name__ == "__main__":
MainApp().run()
还有这个
<Temp@BoxLayout>
id: tmp
Button:
id: idti
text: "-"
on_press: root.remove_content(id)
Label:
id: idlbl
text: "Temp"
<ScreenApp>:
BoxLayout:
orientation: "vertical"
BoxLayout:
id: contents
orientation: "vertical"
Button:
text: "+"
on_press: root.add_content()
我想通过单击按钮删除小部件,并且最底部的小部件上升到远程小部件 TM 的位置而不留空 space。先感谢您。
再说几句删除弹出窗口。
使用self.ids.contents.remove_widget(instance)
删除对象实例。具体请参考解释和示例。
kv 文件
- 将动态 class、
<Temp@BoxLayout>
替换为 class 规则、<Temp>:
- 删除
id: tmp
因为不需要
- 将
root.remove_content(id)
替换为 app.root.remove_content(root)
,因为我们正在将方法移至 class ScreenApp(),因为那里已经有 add_content()
方法。
- 我们没有传递
id
作为参数,而是传递 root
即要删除的 Temp
对象的实例。
- 将
text: 'Temp'
替换为 root.text
以进行可视化。
- 删除了 class 规则下的第一个
BoxLayout:
,<ScreenApp>:
因为它已经是一个 BoxLayout,不需要另一个 BoxLayout i.e.nested BoxLayouts。
Python代码
- 添加
text
作为 class Temp()
. 的构造方法的参数
- 已添加
self.text = text
作业
- 实例化
Temp
对象时添加 text='Temp' + str(self.idsum)
例子
main.py
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class Temp(BoxLayout):
def __init__(self, iid, text, **kwargs):
super(Temp, self).__init__(**kwargs)
self.id = str(iid)
self.text = text
class ScreenApp(BoxLayout):
def __init__(self):
BoxLayout.__init__(self)
self.idsum = 0
self.idsum += 1
self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))
self.idsum += 1
self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))
def add_content(self):
self.idsum+=1
self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))
def remove_content(self, instance):
self.ids.contents.remove_widget(instance)
class MainApp(App):
def build(self):
return ScreenApp()
if __name__ == "__main__":
MainApp().run()
main.kv
#:kivy 1.11.0
<Temp>:
text: 'Temp'
Button:
id: idti
text: "-"
on_press: app.root.remove_content(root)
Label:
id: idlbl
text: root.text
<ScreenApp>:
orientation: "vertical"
BoxLayout:
id: contents
orientation: "vertical"
Button:
text: "+"
on_press: root.add_content()
输出
我有这个代码。
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
class Temp(BoxLayout):
def __init__(self, iid):
BoxLayout.__init__(self)
self.id = str(iid)
def remove_content(self, iid):
#How me need use remove_widget() function?
#self.ids['tmp'].remove_widget(?)
class ScreenApp(BoxLayout):
def __init__(self):
BoxLayout.__init__(self)
self.idsum = 0
self.idsum+=1
self.ids['contents'].add_widget(Temp(iid = self.idsum))
self.idsum+=1
self.ids['contents'].add_widget(Temp(iid = self.idsum))
def add_content(self):
self.idsum+=1
self.ids['contents'].add_widget(Temp(iid = self.idsum))
class MainApp(App):
def build(self):
return ScreenApp()
if __name__ == "__main__":
MainApp().run()
还有这个
<Temp@BoxLayout>
id: tmp
Button:
id: idti
text: "-"
on_press: root.remove_content(id)
Label:
id: idlbl
text: "Temp"
<ScreenApp>:
BoxLayout:
orientation: "vertical"
BoxLayout:
id: contents
orientation: "vertical"
Button:
text: "+"
on_press: root.add_content()
我想通过单击按钮删除小部件,并且最底部的小部件上升到远程小部件 TM 的位置而不留空 space。先感谢您。 再说几句删除弹出窗口。
使用self.ids.contents.remove_widget(instance)
删除对象实例。具体请参考解释和示例。
kv 文件
- 将动态 class、
<Temp@BoxLayout>
替换为 class 规则、<Temp>:
- 删除
id: tmp
因为不需要 - 将
root.remove_content(id)
替换为app.root.remove_content(root)
,因为我们正在将方法移至 class ScreenApp(),因为那里已经有add_content()
方法。 - 我们没有传递
id
作为参数,而是传递root
即要删除的Temp
对象的实例。 - 将
text: 'Temp'
替换为root.text
以进行可视化。 - 删除了 class 规则下的第一个
BoxLayout:
,<ScreenApp>:
因为它已经是一个 BoxLayout,不需要另一个 BoxLayout i.e.nested BoxLayouts。
Python代码
- 添加
text
作为 classTemp()
. 的构造方法的参数
- 已添加
self.text = text
作业 - 实例化
Temp
对象时添加text='Temp' + str(self.idsum)
例子
main.py
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class Temp(BoxLayout):
def __init__(self, iid, text, **kwargs):
super(Temp, self).__init__(**kwargs)
self.id = str(iid)
self.text = text
class ScreenApp(BoxLayout):
def __init__(self):
BoxLayout.__init__(self)
self.idsum = 0
self.idsum += 1
self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))
self.idsum += 1
self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))
def add_content(self):
self.idsum+=1
self.ids['contents'].add_widget(Temp(iid=self.idsum, text='Temp' + str(self.idsum)))
def remove_content(self, instance):
self.ids.contents.remove_widget(instance)
class MainApp(App):
def build(self):
return ScreenApp()
if __name__ == "__main__":
MainApp().run()
main.kv
#:kivy 1.11.0
<Temp>:
text: 'Temp'
Button:
id: idti
text: "-"
on_press: app.root.remove_content(root)
Label:
id: idlbl
text: root.text
<ScreenApp>:
orientation: "vertical"
BoxLayout:
id: contents
orientation: "vertical"
Button:
text: "+"
on_press: root.add_content()