简体   繁体   English

AttributeError'Button'对象没有属性scrlFBtn

[英]AttributeError 'Button' object has no attribute scrlFBtn

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.core.window import Window
from kivy.uix.scrollview import ScrollView
from kivy.effects.scroll import ScrollEffect
from kivy.uix.widget import Widget
from kivy.uix.button import Button

class BSGameMain:
    def sas(self):
        # blmain.remove_widget(scrlFBtns)
        self.scrlFBtns.remove_widget(blbtns)

    blmain = BoxLayout(orientation = 'vertical') # MainBoxLayout init

    scrlFBtns = ScrollView(effect_cls = 'ScrollEffect')

    blbtns = BoxLayout(
        orientation = 'vertical',
        size_hint_y = None
        ) # BoxLayout for buttons

    blbtns.bind(minimum_height = blbtns.setter('height'))
    scrlFBtns.add_widget(blbtns)

    for i in range (2):
        blbtns.add_widget(Button(
            text='asd',
            size_hint_y = None,
            height = 40,
            on_press = sas
            ))

    lblmain = Label(text = 'asd')
    blmain.add_widget(lblmain)
    blmain.add_widget(scrlFBtns)


class BSApp(App):
    def build(self):
        game = BSGameMain()
        return game.blmain

if __name__ == "__main__":
    BSApp().run()

AttributeError 'Button' object has no attribute scrlFBtn. AttributeError'按钮'对象没有属性scrlFBtn。 What is the problem? 问题是什么? I'm trying to make it so that when you clicked, the screen was cleared (Widget was deleted). 我试图这样做,以便当您单击时,屏幕被清除(小部件已删除)。 Рelp me please =) Рelp,请给我=)

Your code has several errors and bad programming practices: 您的代码有一些错误和不良的编程习惯:

  • if you declare variables that are inside a class and outside any method of the class will be class variables and not attributes of the class, so it is not a good practice to do so if you want to use later self , all that code must be within a method of a class. 如果您声明的变量在类之内并且在该类的任何方法之外,则将是类变量而不是类的属性,因此如果要使用以后的self ,这样做不是一个好习惯,那么所有这些代码都必须是在类的方法中。

  • on_someproperty wait as parameter a function that receives parameters, in your case sas() does not receive them so the solution is to use a lambda method. on_someproperty将接收参数的函数作为参数等待,在您的情况下, sas()不接收参数,因此解决方案是使用lambda方法。


from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.effects.scroll import ScrollEffect
from kivy.uix.button import Button

class BSGameMain:
    def __init__(self):
        self.blmain = BoxLayout(orientation = 'vertical') # MainBoxLayout init

        self.scrlFBtns = ScrollView(effect_cls = 'ScrollEffect')

        self.blbtns = BoxLayout(
            orientation = 'vertical',
            size_hint_y = None )

        self.blbtns.bind(minimum_height = self.blbtns.setter('height'))
        self.scrlFBtns.add_widget(self.blbtns)

        for i in range(2):
            self.blbtns.add_widget(Button(
                text='asd',
                size_hint_y = None,
                height = 40,
                on_press = lambda *args: self.sas()))

        lblmain = Label(text = 'asd')
        self.blmain.add_widget(lblmain)
        self.blmain.add_widget(self.scrlFBtns)

    def sas(self):
        self.scrlFBtns.remove_widget(self.blbtns)


class BSApp(App):
    def build(self):
        game = BSGameMain()
        return game.blmain

if __name__ == "__main__":
    BSApp().run()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM