微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在python kivy中删除小部件

如何解决如何在python kivy中删除小部件

我想通过单击“角质模式”按钮删除“bl”小部件,但它最初不在屏幕上。如何通过单击按钮来删除小部件?

from kivy.app import App
from kivy.uix.Boxlayout import BoxLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.config import Config
from kivy.core.window import Window
from kivy.uix.image import Image
from kivy.uix.widget import Widget

class ScraperApp(App,FloatLayout):
    def PhotGif(self):
        wentil = Image(source='img.gif',size_hint = (.5,.5),anim_loop = 99999)
        photo = AnchorLayout(anchor_x='center',anchor_y='top',padding = [0,75,0])
        photo.add_widget(wentil)
        return photo

    def build(self):
        
        bl = BoxLayout(orientation='horizontal',padding = [50,100,50,150],spacing = 5)
        bl.add_widget( Button(text = '1',on_press = self.first,font_size = 20,size_hint = (.3,.1)))
        bl.add_widget( Button(text = '2',on_press = self.second,.1)))
        #bl.add_widget( Button(text = 'Wallpaper mode',on_press = self.wallpaper,.1)))
        wid = FloatLayout()
        wid.add_widget(ScraperApp().PhotGif())
        wid.add_widget(bl)
        return wid

    def first(self,instance):
        print('Horny mode')
        instance.text = 'кнопка нажата'
        ScraperApp().build().remove_widget(bl)
        stop()

    def stop():
        ScraperApp().build().remove_widget(bl)

    def second(self,instance):
        print('Soft mode')
        instance.text = 'кнопка нажата'

if __name__ == '__main__':
    ScraperApp().run()

你能帮我做一下,当你点击任何按钮时,删除按钮的小部件吗?

解决方法

首先,保存对要删除的小部件的引用:

def build(self):
    self.bl = BoxLayout(orientation='horizontal',padding=[50,100,50,150],spacing=5)
    self.bl.add_widget(Button(text='1',on_press=self.first,font_size=20,size_hint=(.3,.1)))
    self.bl.add_widget(Button(text='2',on_press=self.second,.1)))
    # self.bl.add_widget( Button(text = 'Wallpaper mode',on_press = self.wallpaper,font_size = 20,size_hint = (.3,.1)))
    wid = FloatLayout()
    wid.add_widget(ScraperApp().PhotGif())
    wid.add_widget(self.bl)
    return wid

然后修改first()方法将其移除:

def first(self,instance):
    print('Horny mode')
    instance.text = 'кнопка нажата'
    self.root.remove_widget(self.bl)
    self.stop()

注意代码:

ScraperApp().build().remove_widget(bl)

创建 ScaperApp 的新实例并尝试从该实例中删除 bl。除了其他问题,您对该新实例所做的任何操作都不会影响当前正在运行的实例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。