Функция создает кнопки, но они не могут запускать другие функции - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь создать динамический макет c в Kivy, моя функция генерирует кнопки, но они не могут вызвать любую другую функцию, которая будет отвечать за создание меток:

def candidate_builder(self):
    file = open('GSUCandidates.txt', 'r')
    for names in file:
        names = names.rstrip()
        if 'President' in names:
            cbl_layout = self.ids['cs_grid']
            cn_label = Label(bold=True, text=names)
            cn_button = Button(id='pr', bold=True, text='Vote')
            cn_button.on_release = show()
            cbl_layout.add_widget(cn_label)
            cbl_layout.add_widget(cn_button)
            cbl_layout.height = cbl_layout.height + 250

            def show():
                vp_label = Label(bold=True, text=names)
                cpl_layout = self.ids['csp_grid']
                cpl_layout.add_widget(vp_label)

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Вы можете использовать:

cn_button = Button(id='pr', bold=True, text='Vote', on_release=show)
...
def show(*args):

Или, если вы хотите отправить переменные в ваш метод, вы должны использовать лямбду:

cn_button = Button(id='pr', bold=True, text='Vote', on_release=lambda event: show()) # <- here you should have parentheses, where you can put anything you want
...
def show():
0 голосов
/ 24 января 2020

Вы не хотите show в кавычках (что делает его строкой, а не ссылкой на функцию). Я думаю, вам нужно использовать

cn_button.on_release = show

, и я думаю, что он должен появиться после def show(). Также экземпляр Button будет передан методу show(), поэтому вам нужно определить его как:

def show(butt_instance):
...