我创建了一个变量colonne
,该变量返回列号。
我正试图将其放入我的函数选择中,
self.ids.image+colonne+_1
这是我的完整视图:
Button:
on_press: root.click_colonne(1)
pos: 25,25
size: 100, 500
opacity:0
Image:
source: 'image.png'
pos: 0,0
size: 150,150
id: image1_1
Image:
source: 'image.png'
pos: 0,100
size: 150,150
id: image1_2
Image:
source: 'image.png'
pos: 0,200
size: 150,150
id: image1_3
Image:
source: 'image.png'
pos: 0,300
size: 150,150
id: image1_4
Image:
source: 'image.png'
pos: 0,400
size: 150,150
id: image1_5
Button:
on_press: root.click_colonne(2)
pos: 125,25
size: 100, 500
opacity:0
Image:
source: 'image.png'
pos: 100,0
size: 150,150
id: image2_1
Image:
source: 'image.png'
pos: 100,100
size: 150,150
id: image2_2
Image:
source: 'image.png'
pos: 100,200
size: 150,150
id: image2_3
Image:
source: 'image.png'
pos: 100,300
size: 150,150
id: image2_4
Image:
source: 'image.png'
pos: 100,400
size: 150,150
id: image2_5
这是我的完整功能:
def click_colonne(self, colonne):
if self.ids.image+colonne+_1.source == "image.png":
self.ids.image+colonne+_1.source = "image_rouge.png"
elif self.ids.image+colonne+_2.source == "image.png":
self.ids.image+colonne+_2.source = "image_rouge.png"
elif self.ids.image+colonne+_3.source == "image.png":
self.ids.image+colonne+_3.source = "image_rouge.png"
elif self.ids.image+colonne+_4.source == "image.png":
self.ids.image+colonne+_4.source = "image_rouge.png"
elif self.ids.image+colonne+_5.source == "image.png":
self.ids.image+colonne+_5.source = "image_rouge.png"
这是错误
File "main.py", line 36
self.ids.image+colonne+_5.source = "image_rouge.png"
^
SyntaxError: can't assign to operator
有人可以给我正确的语法吗?
答案 0 :(得分:2)
级联不会生成该变量的名称,而是仅添加其值,而不能在操作符=的左侧进行。更好的选择是将名称构建为字符串并通过ids字典使用
self.ids["image{}_{}".format(colone, 5)].source = "image_rouge.png"
另一种解决方法是
getattr(self.ids, "image{}_{}".format(colone, 5)).source = "image_rouge.png"
答案 1 :(得分:1)
这是在Python 3.6及更高版本中有效的另一种解决方案:
def click_colonne(self, colonne):
for i in range(1, 6):
if self.ids[f"image{colone}_{i}"].source == "image.png":
self.ids[f"image{colone}_{i}"].source = "image_rouge.png"
break
f""
取代了.format()
函数,使您可以在引号内添加变量。