当引用kv中的kivy项时,为什么不能使用变量?
self.ids.top_left.background_normal = "x.png"
这个工作正常,而“top_left”直接是kv文件中的ID,“x.png”直接引用图片。但是,当我说出类似的话:
button_pressed = top_left
picture_touse = "x.png"
self.ids.button_pressed.background_normal = picture_touse
然后它打破并给我一个错误:
AttributeError: 'super' object has no attribute '__getattr__'
如何使用生成的引用来引用kv项?
答案 0 :(得分:1)
由于kivy将所有小部件标记为id' s in a dictionary type propety。因此,您可以使用dict [key]引用它。解决方案是替换
self.ids.button_pressed.background_normal = picture_touse
与
self.ids[button_pressed].background_normal = picture_touse
class ScreenTwo(Screen, Widget):
def methodforbuttonpress(self, button_pressed):
kivy_logo = "kivy-logo-black-64.png"
self.ids[button_pressed].background_normal = kivy_logo
答案 1 :(得分:0)
没关系,只是找到答案,对于任何想要这样做的人,只需创建:
check_ref = {}
(称之为你想要的)然后在引用ID之前调用它,然后将其余信息放在方括号中,例如:
self.ids.check_ref[button_pressed].background_normal = check_ref[picture_touse]