赞
踩
Kviy中的Button控件常用于在Python应用程序中添加按钮,在按钮上可以放置文本或图像,也可以监听用户行为等。
实例:设置Button按钮的使用方法
在.py文件内,使用按钮需要引入Button类,通过Button类生成一个按钮,再通过add_widget()方法添加到布局中即可,具体关键代码如下:
- #导入控件
- from kivy.uix.button import Button
- #指定属性
- bt = Button(text='Button 01')
- #添加到布局中
- self.add_widget(bt)
结合第二章布局知识,使用BoxLayout布局制作一个只有一个按钮的界面布局,代码如下:
- #导入app类
- from kivy.app import App
- #导入布局类
- from kivy.uix.boxlayout import BoxLayout
-
- #导入控件
- from kivy.uix.button import Button
- class BoxLayoutWidget(BoxLayout):
- def __init__(self,**kwargs):
- super().__init__(**kwargs)
-
- #指定属性
- bt = Button(text='Button 01')
- #添加到布局中
- self.add_widget(bt)
- class BoxApp(App):
- def build(self):
- return BoxLayoutWidget()
- if __name__=='__main__':
- BoxApp().run()
当然也可以像第二章一样,使用.kv文件实现。相比之下,在.kv文件内使用它就非常简单,无需引入即可直接使用,具体关键代码如下:
- Button:
- text:'Button 02'
为了在.kv文件中实现上述功能,修改main.py文件,删除布局内容部分,具体如下:
- from kivy.app import App
- from kivy.uix.button import Button
- from kivy.uix.boxlayout import BoxLayout
-
- #布局类
- class BoxLayoutWidget(BoxLayout):
- #初始化
- def __init__(self,**kwargs):
- super().__init__(**kwargs)
- class BoxApp(App):
- #实现App类的build()方法(继承自App类)
- def build(self):
- #返回根控件
- return BoxLayoutWidget()
- if __name__ == '__main__':
- #启动程序
- BoxApp().run()
根据main.py文件中定义的BoxApp类名字,对应的新建Box.kv文件,内容如下:
- <BoxLayoutWidget>:
- Button:
- text:'Button 02'
执行main.py文件,即可获得上述效果
注意:如果未指定按钮的位置和大小,在运行程序时,Kivy会自动放大根控件,并使整个按钮充满窗口。另外由于.py优先级更高,因此会覆盖掉上述代码中的“Button 02”按钮。
为了美观,Kivy提供了Button按钮常用的属性来改变样式,关于Button按钮的常用属性及说明如下所示:
属 性 | 说 明 |
background_color | 按钮背景颜色,rgba格式,默认为灰色 |
text | 按钮显示的文本 |
font_size | 文本字体大小,默认为15sp |
color | 文本字体颜色,rgba格式,默认为白色[1,1,1,1] |
state | 按钮状态,默认为“normal”,可设置成“down” |
disabled | 如果为True时则禁用按钮,默认为False |
background_disabled_down | 默认为“Kivy/tools/theming/defaulttheme/button_disabled_pressed.png”属性 |
background_disabled_normal | 默认为“Kivy/tools/theming/defaulttheme/button_disabled.png”属性 |
background_down | 按下按钮时显示的图像,默认为“kivy/tools/theming/defaulttheme/button_pressed.png”属性 |
background_normal | 按下按钮时显示的图像,默认为“kivy/tools/theming/defaulttheme/button.png”属性 |
border | 与background_normal和background_down属性一起使用,可以用于自定义背景 |
实例:设置Button按钮的常用属性
新建一个main.py文件,用于加载button.kv文件,代码如下:
- from kivy.app import App
- from kivy.uix.floatlayout import FloatLayout
- class ButtonFloatLayout(FloatLayout):
- def __init__(self,**kwargs):
- super().__init__(**kwargs)
- class ButtonApp(App):
- def build(self):
- return ButtonFloatLayout()
- if __name__ == '__main__':
- ButtonApp().run()
这里将在button.kv文件内演示Button的属性,具体代码如下:
- <MyButton@Button>
- size_hint:.2,.15
-
- <ButtonFloatLayout>:
- Button:
- text:'Button 00'
- size_hint:.2,.15
- pos:65,400
- background_normal:''
- background_color:[.1,.5,.5,1]
-
- MyButton:
- text:'Button01'
- pos:315,400
- disabled:True
-
- MyButton:
- text:'Button 02'
- color:[.8,.3,.3,1]
- pos:565,400
-
- MyButton:
- text:'Button 03'
- font_size:15
- pos:65,150
-
- MyButton:
- text:'Button 04'
- font_size:25
- pos:315,150
- state:'normal'
- MyButton:
- text:'Button 05'
- pos:565,150
- state:'down'
运行main.py文件,结果如下图:
注意:Kivy不能识别.kv文件内的中文编码,直接添加中文时会抱错,如果学要添加中文,请查阅第一章内容:《Python+Kivy(App开发)从入门到实践》自学笔记:解决Kivy不能显示中文问题_静候光阴的博客-CSDN博客
Button按钮主要包括以下两个触发事件:
on_press:按下按钮时触发事件
on_release:按下按钮并释放时,触发该事件
实例:设置Button按钮并触发事件
通过.py文件添加Button按钮,设置触发事件的回调函数,或者通过bind方法重新绑定后,再添加到布局内。由于触发事件传递的参数有2个,所以在回调函数里需要2个参数来匹配,具体代码如下:
- from kivy.app import App
- from kivy.uix.floatlayout import FloatLayout
-
-
-
- class ButtonFloatLayout(FloatLayout):
- def __init__(self,**kwargs):
- super().__init__(**kwargs)
-
- from kivy.uix.button import Button
- bt = Button(text='Button',on_release=self.release_button)
- bt.bind(on_press=self.press_button)
- self.add_widget(bt)
-
-
- def press_button(self,arg):
- #按下按钮触发事件的回调函数
- print('press_button is running')
-
- def release_button(self,arg):
- #按下按钮并释放时触发事件的回调函数
- print('release_button is running')
-
- class ButtonApp(App):
- def build(self):
- return ButtonFloatLayout()
-
- if __name__ == '__main__':
- ButtonApp().run()
运行效果如下:
使用.kv文件添加按钮时,将main.py文件中的布局内容删除,内容如下:
- from kivy.app import App
- from kivy.uix.floatlayout import FloatLayout
-
-
-
- class ButtonFloatLayout(FloatLayout):
- def __init__(self,**kwargs):
- super().__init__(**kwargs)
-
-
- def press_button(self,arg):
- #按下按钮触发事件的回调函数
- print('press_button is running')
-
- def release_button(self,arg):
- #按下按钮并释放时触发事件的回调函数
- print('release_button is running')
-
- class ButtonApp(App):
- def build(self):
- return ButtonFloatLayout()
-
- if __name__ == '__main__':
- ButtonApp().run()
根据main.py内ButtonApp()类名称,新建button.kv文件,具体内容如下:
- <ButtonFloatLayout>:
- Button:
- text:'Button'
- size_hint:.2,.15
- pos_hint:{'center_x':.5,'center_y':.5}
- background_normal:''
- background_color:[.1,.5,.5,1]
- on_release:root.release_button(self)
- on_press:root.press_button(self)
注:以上代码最后两行,原书内容为:
- on_release:root.release_button()
- on_press:root.press_button()
运行后报错,提示缺少参数。在调用以上两个方法的时候,传入'self'参数,运行正常,具体如下:
如果想要在一个触发事件内调用多个回调函数,只需要在“:”后换行,并且每行添加对应的回调函数即可,也可以直接使用python语言中的内置方法,具体如下:
- <ButtonFloatLayout>:
- Button:
- text:'Button'
- size_hint:.2,.15
- pos_hint:{'center_x':.5,'center_y':.5}
- background_normal:''
- background_color:[.1,.5,.5,1]
- on_release:
- root.release_button(self)
- print('cocpy.com')
- on_press:root.press_button(self)
注意:这里要特别注意缩进,在Python语言中,对缩进的要求很严格,且部分编辑器不能直接将<Tab>键替换为4个空格。
运行结果如下:
下一篇:简单UX部件——Label标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。