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'对象没有属性scrlFBtn。问题是什么?我试图让它成为当你点击时,屏幕被清除(Widget被删除)。 Р给我请=)
答案 0 :(得分:1)
您的代码有多个错误和糟糕的编程习惯:
如果声明类中的变量,并且类的任何方法之外都是类变量而不是类的属性,那么如果你想稍后使用它就不是一个好习惯{ {1}},所有代码都必须在类的方法中。
self
将接收参数的函数作为参数等待,在您的情况下on_someproperty
不接收它们,因此解决方案是使用lambda方法。
sas()