Kivy:如何在 class 之外更新 bool
Kivy: how to update a bool outside class
当我点击和关闭复选框时,bool 当前会更新,但是当我点击按钮时,它将始终打印我在开始时定义的默认值。如何更新 class 之外的布尔值,以便在我单击按钮并调用函数时更新布尔值?
此外,单击 class 之外的按钮时如何调用这样的函数?
谢谢
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()
如果您想在 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()
当我点击和关闭复选框时,bool 当前会更新,但是当我点击按钮时,它将始终打印我在开始时定义的默认值。如何更新 class 之外的布尔值,以便在我单击按钮并调用函数时更新布尔值?
此外,单击 class 之外的按钮时如何调用这样的函数?
谢谢
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()
如果您想在 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()