• 《Python+Kivy(App开发)从入门到实践》自学笔记:简单UX部件——CheckBox复选框


    章节知识点总揽

    4.5 CheckBox复选框

            CheckBox复选框包括一个特定的两种状态按钮:可以选中或取消选中。如果一个组中只有一个CheckBox,它将成为一个单选按钮。与ToggleButton按钮在设置CheckBox.group时,一次只能选择一个单选按钮一样。

    4.5.1 使用方法

            在.py文件内使用复选框需要引入CheckBox类,通过CheckBox类生成一个复选框并设置相关样式,再通过add_widget()方法添加到布局中即可,关键代码如下:

    1. from kivy.uix.checkbox import CheckBox
    2. #以下内容放在布局__init__()函数内
    3. checkbox = CheckBox()
    4. checkbox.bind(active=self.on_checkbox_active) #因为放在类的__init__()函数内,需要指定使用self自身的函数
    5. self.add_widget(checkbox)
    6. #以下内容放在布局类内,与__init__()
    7. def on_checkbox_active(self,checkbox,value):
    8. if value:
    9. print('The checkbox',checkbox,'is active')
    10. else:
    11. print('the checkbox',checkbox,'is inactive')

            新建main.py文件,使用floatlayout布局,内容如下:

    1. from kivy.app import App
    2. from kivy.uix.floatlayout import FloatLayout
    3. from kivy.uix.checkbox import CheckBox
    4. class FloatLayoutWidget(FloatLayout):
    5. def __init__(self,**kwargs):
    6. super().__init__(**kwargs)
    7. checkbox = CheckBox()
    8. checkbox.bind(active=self.on_checkbox_active)
    9. self.add_widget(checkbox)
    10. def on_checkbox_active(self,checkbox,value):
    11. if value:
    12. print('The checkbox',checkbox,'is active')
    13. else:
    14. print('the checkbox',checkbox,'is inactive')
    15. class CheckBoxApp(App):
    16. def build(self):
    17. return FloatLayoutWidget()
    18. if __name__ == '__main__':
    19. CheckBoxApp().run()

            运行main.py文件,结果如下图:

    8fedb6fdef9649209754de3c4f54b09b.png

             相比之下,在.kv内使用就非常简单,无需引入即可使用。关键代码如下:        

    1. #设置布局后,输入下列内容即可
    2. CheckBox:
    3. active:True

            使用.kv实现CheckBox复选框功能,修改main.py文件,删除所有布局内容,具体如下:

    1. from kivy.app import App
    2. from kivy.uix.floatlayout import FloatLayout
    3. class FloatLayoutWidget(FloatLayout):
    4. def __init__(self,**kwargs):
    5. super().__init__(**kwargs)
    6. class CheckBoxApp(App):
    7. def build(self):
    8. return FloatLayoutWidget()
    9. if __name__ =="__main__":
    10. CheckBoxApp().run()

            根据CheckBoxApp()类,新建checkbox.kv文件,内容如下:

    1. <FloatLayoutWidget>:
    2. CheckBox:
    3. active:True

            运行main.py文件,可以实现复选框功能,只是没有触发事件而已。

    4.5.2 常用属性

            在kivy中为了方便设置CheckBox的样式,提供了大量的属性,具体如下表:

    CheckBox常用属性

    属性说明
    activ是否选中该CheckBox,默认为False
    group组名,在同一组中只能单选
    color显示的颜色,格式为rgba,默认为[1,1,1,1]
    background_checkbox_disabled_down默认为“kivy/tools/theming/defaulttheme/checkbox_disabled_on.png”
    background_checkbox_disabled_normal复选框处于禁用状态且未选中时,显示的背景图像,默认为"checkbox_disabled_off.png"
    background_checkbox_down复选框在选中时,显示的背景图像,默认为“checkbox_on.png”
    background_checkbox_normal复选框未被选中时,显示的背景图像,默认为“checkbox_off.png”
    background_radio_disabled_down默认为“checkbox_radio_disabled_on.png”
    background_radio_disabled_normal默认为“checkbox_radio_disabled_off.png”
    background_radio_down单选按钮选中时,显示的背景图像,默认为“checkbox_radio_on.png”
    background_radio_normal单选按钮未选中时,显示的背景图像,默认为“checkbox_radio_off.png”

            实例:设置CheckBox复选框的常用属性

            在main.py文件中,使用BoxLayout布局来加载checkbox.kv文件,在.kv文件内设置四个复选框,其中三个为一组,具体代码如下:

             main.py内容:

    1. from kivy.app import App
    2. from kivy.uix.boxlayout import BoxLayout
    3. class CheckBoxWidget(BoxLayout):
    4. def __init__(self,**kwargs):
    5. super().__init__(**kwargs)
    6. class CheckBoxApp(App):
    7. def build(self):
    8. return CheckBoxWidget()
    9. if __name__ =="__main__":
    10. CheckBoxApp().run()

            根据main.py中建立的CheckBoxApp()类,新建checkbox.kv文件,根据main.py创建的CheckBoxWidget()类,在checkbox.kv文件中,使用该布局。

            注:原书id部分属性空格有误,下列代码正确。

    1. <CheckBoxWidget>:
    2. orientation:'vertical'
    3. canvas:
    4. Color:
    5. rgba:[1,1,1,1]
    6. Rectangle:
    7. pos:self.pos
    8. size:self.size
    9. CheckBox:
    10. group:'check_0'
    11. id:'first_check_0'
    12. color:.6,.2,.2,1
    13. CheckBox:
    14. group:'check_0'
    15. color:.2,.6,.2,1
    16. CheckBox:
    17. group:'check_0'
    18. color:.2,.2,.6,1
    19. CheckBox:
    20. color:.6,.6,.6,1

            运行main.py文件,checkbox.kv文件中,设置group的按钮,同组只能选一个(圆形);未设置组的,可以多选(方框)。结果如下图:

    64e04aa2da4442b3bf55875fa1f76e4a.png

     

    4.5.3 触发事件

            在设置CheckBox复选框的触发事件时,CheckBox中的触发事件on_checkbox_active(选中复选框触发),不能直接添加在.kv文件中,需要在.py文件内通过ID属性来获取到对应的复选框,并通过bind()方法绑定即可。

            main.py内容:

    1. from kivy.app import App
    2. from kivy.uix.boxlayout import BoxLayout
    3. class CheckBoxWidget(BoxLayout):
    4. def __init__(self,**kwargs):
    5. super().__init__(**kwargs)
    6. #通过ID获取到CheckBox部件并绑定方法
    7. self.ids.first_check_0.bind(active=self.on_checkbox_active)
    8. @staticmethod
    9. def on_checkbox_active(checkbox,value):
    10. if value:
    11. print('The checkbox',checkbox,'is active')
    12. else:
    13. print('The checkbox',checkbox,'is inactive')
    14. class CheckBoxApp(App):
    15. #实现App类的build()方法,(继承自App类)
    16. def build(self):
    17. return CheckBoxWidget()
    18. if __name__=='__main__':
    19. from kivy.core.window import Window
    20. Window.clearcolor = [.8,.8,.8,1]
    21. CheckBoxApp().run()

            checkbox.kv内容:

    1. <CheckBoxWidget>:
    2. orientation:'vertical'
    3. canvas:
    4. Color:
    5. rgba:[1,1,1,1]
    6. Rectangle:
    7. pos:self.pos
    8. size:self.size
    9. CheckBox:
    10. group:'check_0'
    11. id:first_check_0
    12. color:.6,.2,.2,1
    13. CheckBox:
    14. group:'check_0'
    15. color:.2,.6,.2,1
    16. CheckBox:
    17. group:'check_0'
    18. color:.2,.2,.6,1
    19. CheckBox:
    20. color:.6,.6,.6,1

            运行main.py,结果如下图:

    4cea397b07c84dabadac778824f09ec4.png

    上一篇:简单UX部件——TextInput输入框

    下一篇:简单UX部件——Slider滑块

     

     

  • 相关阅读:
    springmvc (四种跳转方式)重定向,转发到页面和action的区别
    【路由优化】基于matlab随机搜索算法优化带有速度的路由网络【含Matlab源码 2046期】
    强引用、软引用、弱引用、幻象引用之间的区别和联系
    1数据结构的分类,算法效率的度量
    0基础学习VR全景平台篇第121篇:认识视频剪辑软件Premiere
    spring boot + feign + Hystrix 整合 (亲测有效)
    Redis - 底层数据结构
    opencv图片绘制图形-------c++
    2023年总结以及对2024年的展望
    使用Express框架操作MongoDB数据库
  • 原文地址:https://blog.csdn.net/lstef/article/details/127654343