《Python+Kivy(App开发)从入门到实践》自学笔记:简单UX部件——Button按钮

本文详细介绍Kivy中Button控件的使用方法、常用属性及触发事件,包括如何设置按钮样式、绑定事件处理函数等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

章节知识点总揽

4.1 Button按钮

        4.1.1 使用方法

        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”按钮。

        4.1.2 常用属性

        为了美观,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文件,结果如下图:

2efffda84c5c4b619ad27fbad5680fda.png

         注意:Kivy不能识别.kv文件内的中文编码,直接添加中文时会抱错,如果学要添加中文,请查阅第一章内容:《Python+Kivy(App开发)从入门到实践》自学笔记:解决Kivy不能显示中文问题_静候光阴的博客-优快云博客

        4.1.3 触发事件

        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()

运行效果如下:

71ec6160aa764db78587b3d3c4e46536.png

         使用.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'参数,运行正常,具体如下:

e9a4d3056ea2429788ad9b379c6db195.png

        如果想要在一个触发事件内调用多个回调函数,只需要在“:”后换行,并且每行添加对应的回调函数即可,也可以直接使用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个空格。

        运行结果如下:

ae3c140bffed4998a5d475803df614b5.png

上一篇:基本图形绘制——动手实践——画板——清屏

下一篇:简单UX部件——Label标签

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静候光阴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值