Kivy: как обновить логическое значение вне класса

Bool в настоящее время обновляется, когда я нажимаю и снимаю флажок, однако, когда я нажимаю кнопку, он всегда будет печатать значение по умолчанию, которое я определил в начале. Как я могу обновить логическое значение, находящееся вне класса, чтобы при нажатии кнопки и вызове функции оно обновляло логическое значение?

Кроме того, как я могу вызвать такую ​​​​функцию при нажатии кнопки, которая находится вне класса?

Спасибо

someBool = False


def someFunction():
    print(someBool)



class MyGridLayout(GridLayout):
    def __init__(self, **kwargs):
        #grid layout constructor
        super(MyGridLayout, self).__init__(**kwargs)

        #set columns for the layout
        self.cols = 2

        self.add_widget(Label(text = "checkbox"))
        self.checkbox= CheckBox(active = False)
        self.add_widget(self.checkbox)

        #this will bind the label and checkbox
        self.checkbox.bind(active = self.checkboxActive)

        self.button= Button(text = "Button")
        self.button.bind(on_press=someFunction)
        self.add_widget(self.button)

    def checkboxActive(self, checkbox, value):
        if value:
            someBool = True
        else:
            someBool = False


class MyApp(App):
    def build(self):
        return MyGridLayout()


if __name__ == '__main__':
    MyApp().run()
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите изменить значение вне функции в python, вы должны указать ее область действия. Это легко сделать с помощью global variable.

Затем для кнопки вы должны передать методу kivy on_press анонимную функцию, связывающую ее с нужной вам функцией. Таким образом, нажатие вызовет переданную функцию. Поэтому нам придется использовать lambda для этого.

Попробуйте этот код:

someBool = False


def someFunction():
    global someBool

    print(someBool)


class MyGridLayout(GridLayout):
    def __init__(self, **kwargs):
        # grid layout constructor
        super(MyGridLayout, self).__init__(**kwargs)

        # set columns for the layout
        self.cols = 2

        self.add_widget(Label(text = "checkbox"))
        self.checkbox = CheckBox(active=False)
        self.add_widget(self.checkbox)

        # this will bind the label and checkbox
        self.checkbox.bind(active=self.checkboxActive)

        self.button = Button(text = "Button")
        self.button.bind(on_press=lambda x: someFunction())
        self.add_widget(self.button)

    def checkboxActive(self, checkbox, value):
        global someBool

        if value:
            someBool = True
        else:
            someBool = False


class MyApp(App):
    def build(self):
        return MyGridLayout()


if __name__ == '__main__':
    MyApp().run()

Другие вопросы по теме