用kivy引用kv中的项目的问题

时间:2017-09-14 20:15:59

标签: python kivy

当引用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项?

2 个答案:

答案 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

输出

enter image description here

答案 1 :(得分:0)

没关系,只是找到答案,对于任何想要这样做的人,只需创建:

check_ref = {}

(称之为你想要的)然后在引用ID之前调用它,然后将其余信息放在方括号中,例如:

self.ids.check_ref[button_pressed].background_normal = check_ref[picture_touse]