Как сделать так, чтобы кнопка передавала свое имя функции, когда она нажата? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть функция, которая создает кнопки на основе подпапок в папке.Он создает кнопку для каждой подпапки и дает ей имя подпапки.

При нажатии я хочу, чтобы кнопка открыла другую функцию и передала этой функции ее имя.

def _sidepanel(self):
    curdir = "/Users/xxx/Desktop/Test/"
    layout = BoxLayout(orientation="vertical", pos_hint={"x": 0.0, "y": 0.0}, size_hint=(0.1,1))

    for folders in glob(join(curdir, "*")):
        name = basename(folders)
        btn = Button(text=name, on_press=lambda x: self._printname(name))
        layout.add_widget(btn)

    return layout

def _printname(self, name):
    print(name)

У меня есть 5 подпапок, и я ожидаю, что кнопка напечатает ее конкретное имя, но вместо этого все они печатают имя последней папки, запущенной первой функцией.

1 Ответ

0 голосов
/ 04 февраля 2019

Ваша последняя ссылка решила мой вопрос.Спасибо - только что прикрепил мой отредактированный код.

def _sidepanel(self):
    curdir = "/Users/xxx/Desktop/Test/"
    layout = BoxLayout(orientation="vertical", pos_hint={"x": 0.0, "y": 0.0}, size_hint=(0.1,1))

    layout.add_widget(Button(text="Import\nPhotos"))
    layout.add_widget(Button(text="Create\nReport"))
    layout.add_widget(Button(text="Save?"))
    layout.add_widget(Button(text="Button 4"))

    for folders in glob(join(curdir, "*")):
        name = basename(folders)
        btn = Button(text=name, on_press=lambda n=name:self._showphotos(n))
        layout.add_widget(btn)

    return layout


def _showphotos(self, entry):
    print(entry.text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...