Kivy/python : 如何检查 .py 文件中的复选框
Kivy/python : How to check checkbox from a .py file
我在Python(test.py)和kivy(test.kv)中写了一些代码。
当我 运行 test.py
时,男性复选框显示已选中,女性复选框未选中,因为我在 test.kv
文件中使用:
active: root.male
但我想从 .py 文件中得到同样的东西。如何从 .py 文件中选中男性复选框?
test.py
from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.properties import ObjectProperty
Window.size = (600, 325)
class UserGroup(Screen):
male = ObjectProperty(None)
female = ObjectProperty(None)
age = ObjectProperty(None)
def insert_data(self):
print('')
class FactUserGroup(App):
def build(self):
self.root = Builder.load_file('test.kv')
return self.root
if __name__ == '__main__':
FactUserGroup().run()
test.kv
<CustomLabel@Label>:
text_size: self.size
valign: "middle"
padding_x: 5
<SingleLineTextInput@TextInput>:
multiline: False
<GreenButton@Button>:
background_color: 1, 1, 1, 1
size_hint_y: None
height: self.parent.height * 0.120
UserGroup
male: chk_male
female: chk_female
GridLayout:
cols: 2
padding : 30,30
spacing: 20, 20
row_default_height: '30dp'
Label:
text: 'Male'
text_size: self.size
valign: 'middle'
CheckBox:
group: 'check'
id : chk_male
active: root.male
Label:
text: 'Female'
text_size: self.size
valign: 'middle'
CheckBox:
group: 'check'
id: chk_female
GreenButton:
text: 'Ok'
GreenButton:
text: 'Cancel'
on_press: app.stop()
有人可以帮助我吗?
解决方法是使用BooleanProperty,加上active:root.female。在示例中,当 Kivy 应用程序 运行 时,女性复选框处于活动状态(图 1),5 秒后,它将使用 Clock.schedule_once 自动切换到男性复选框(图 2)。
test.py
from kivy.properties import ObjectProperty, BooleanProperty
...
class UserGroup(Screen):
male = BooleanProperty(False)
female = BooleanProperty(True)
test.kv
CheckBox:
group: 'check'
id: chk_female
active: root.female
例子
test.py
from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.properties import ObjectProperty, BooleanProperty
from kivy.clock import Clock
Window.size = (600, 325)
class UserGroup(Screen):
male = BooleanProperty(False)
female = BooleanProperty(True)
age = ObjectProperty(None)
def __init__(self, **kwargs):
super(UserGroup, self).__init__(**kwargs)
Clock.schedule_once(self.switch_checkbox, 5)
def switch_checkbox(self, dt):
self.female = False
self.male = True
def insert_data(self):
print('')
class FactUserGroup(App):
def build(self):
self.root = Builder.load_file('test.kv')
return self.root
if __name__ == '__main__':
FactUserGroup().run()
test.kv
#:kivy 1.10.0
<CustomLabel@Label>:
text_size: self.size
valign: "middle"
padding_x: 5
<SingleLineTextInput@TextInput>:
multiline: False
<GreenButton@Button>:
background_color: 1, 1, 1, 1
size_hint_y: None
height: self.parent.height * 0.120
UserGroup:
GridLayout:
cols: 2
padding : 30,30
spacing: 20, 20
row_default_height: '30dp'
Label:
text: 'Male'
text_size: self.size
valign: 'middle'
CheckBox:
group: 'check'
id : chk_male
active: root.male
Label:
text: 'Female'
text_size: self.size
valign: 'middle'
CheckBox:
group: 'check'
id: chk_female
active: root.female
GreenButton:
text: 'Ok'
GreenButton:
text: 'Cancel'
on_press: app.stop()
输出
我在Python(test.py)和kivy(test.kv)中写了一些代码。
当我 运行 test.py
时,男性复选框显示已选中,女性复选框未选中,因为我在 test.kv
文件中使用:
active: root.male
但我想从 .py 文件中得到同样的东西。如何从 .py 文件中选中男性复选框?
test.py
from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.properties import ObjectProperty
Window.size = (600, 325)
class UserGroup(Screen):
male = ObjectProperty(None)
female = ObjectProperty(None)
age = ObjectProperty(None)
def insert_data(self):
print('')
class FactUserGroup(App):
def build(self):
self.root = Builder.load_file('test.kv')
return self.root
if __name__ == '__main__':
FactUserGroup().run()
test.kv
<CustomLabel@Label>:
text_size: self.size
valign: "middle"
padding_x: 5
<SingleLineTextInput@TextInput>:
multiline: False
<GreenButton@Button>:
background_color: 1, 1, 1, 1
size_hint_y: None
height: self.parent.height * 0.120
UserGroup
male: chk_male
female: chk_female
GridLayout:
cols: 2
padding : 30,30
spacing: 20, 20
row_default_height: '30dp'
Label:
text: 'Male'
text_size: self.size
valign: 'middle'
CheckBox:
group: 'check'
id : chk_male
active: root.male
Label:
text: 'Female'
text_size: self.size
valign: 'middle'
CheckBox:
group: 'check'
id: chk_female
GreenButton:
text: 'Ok'
GreenButton:
text: 'Cancel'
on_press: app.stop()
有人可以帮助我吗?
解决方法是使用BooleanProperty,加上active:root.female。在示例中,当 Kivy 应用程序 运行 时,女性复选框处于活动状态(图 1),5 秒后,它将使用 Clock.schedule_once 自动切换到男性复选框(图 2)。
test.py
from kivy.properties import ObjectProperty, BooleanProperty
...
class UserGroup(Screen):
male = BooleanProperty(False)
female = BooleanProperty(True)
test.kv
CheckBox:
group: 'check'
id: chk_female
active: root.female
例子
test.py
from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.properties import ObjectProperty, BooleanProperty
from kivy.clock import Clock
Window.size = (600, 325)
class UserGroup(Screen):
male = BooleanProperty(False)
female = BooleanProperty(True)
age = ObjectProperty(None)
def __init__(self, **kwargs):
super(UserGroup, self).__init__(**kwargs)
Clock.schedule_once(self.switch_checkbox, 5)
def switch_checkbox(self, dt):
self.female = False
self.male = True
def insert_data(self):
print('')
class FactUserGroup(App):
def build(self):
self.root = Builder.load_file('test.kv')
return self.root
if __name__ == '__main__':
FactUserGroup().run()
test.kv
#:kivy 1.10.0
<CustomLabel@Label>:
text_size: self.size
valign: "middle"
padding_x: 5
<SingleLineTextInput@TextInput>:
multiline: False
<GreenButton@Button>:
background_color: 1, 1, 1, 1
size_hint_y: None
height: self.parent.height * 0.120
UserGroup:
GridLayout:
cols: 2
padding : 30,30
spacing: 20, 20
row_default_height: '30dp'
Label:
text: 'Male'
text_size: self.size
valign: 'middle'
CheckBox:
group: 'check'
id : chk_male
active: root.male
Label:
text: 'Female'
text_size: self.size
valign: 'middle'
CheckBox:
group: 'check'
id: chk_female
active: root.female
GreenButton:
text: 'Ok'
GreenButton:
text: 'Cancel'
on_press: app.stop()