对于与我相似的情况,我看到很多答案:如果我使用“ .add_widget()”函数在代码中添加小部件,则以后可以使用“ .remove_widget()”函数删除此小部件
我的情况有些不同:我正在尝试删除配置文件中添加的屏幕中的按钮(该按钮没有单独的kv文件,因为我仍在进行一些研究以充分理解其原理在Kivy下)。
我正在尝试删除“ MenuScreen”屏幕中ID为“ setBtn”的按钮。 我尝试了几种方法来做到这一点,但是没有人为我工作。
我什至不确定是否有解决方案可以删除尚未动态添加到父窗口小部件的窗口小部件...
我把代码留给您,如果有人可以帮助我,我将非常感激。
谢谢。
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screenmanager,Screen
# Create both screens. Please note the root.manager.current: this is how
# you can control the Screenmanager from kv. Each screen has by default a
# property manager that gives you the instance of the Screenmanager used.
Builder.load_string("""
<MenuScreen>:
BoxLayout:
Button:
id: 'setBtn'
text: 'Goto settings'
on_press: root.manager.current = 'settings'
Button:
text: 'Quit'
on_press: root.remove_settings()
<SettingsScreen>:
BoxLayout:
Button:
text: 'My settings button'
Button:
text: 'Back to menu'
on_press: root.manager.current = 'menu'
""")
# Declare both screens
class MenuScreen(Screen):
def remove_settings(self):
sm.remove_widget(settings)
self.remove_widget(self.ids.setBtn)
print 'Screen "settings" removed succesfully'
class SettingsScreen(Screen):
pass
# Create the screen manager
sm = Screenmanager()
menu = MenuScreen(name='menu')
settings=SettingsScreen(name='settings')
sm.add_widget(menu)
sm.add_widget(settings)
class TestApp(App):
def build(self):
return sm
def exit(self):
self.exit()
if __name__ == '__main__':
TestApp().run()