Переменная сцепления в Python - PullRequest
0 голосов
/ 17 января 2019

Я сделал переменную 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

Может кто-нибудь дать мне правильный синтаксис?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вот еще одно решение, действительное в 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(), позволяя вам добавить переменную в кавычки.

0 голосов
/ 17 января 2019

Конкатенация не генерирует, что имя переменной сформировано, вы только добавляете ее значения, и это не может быть сделано в левой части оператора =. Лучшим вариантом является создание имени в виде строки и использование его через словарь идентификаторов

self.ids["image{}_{}".format(colone, 5)].source = "image_rouge.png"

Другое решение -

getattr(self.ids, "image{}_{}".format(colone, 5)).source = "image_rouge.png"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...