python+kivy(app开发)从入门到实践pdf,python kivy实例
写之前:Java应该是开发app的主流语言,但是我没学过Java但是目前也没有太多时间重新学习,所以就想着用Python开发两个app,已经有介绍了。看了很多资料,在学习的过程中踩了很多坑,所以想着写点自己的经验和大家分享一下。希望你能少踩几个洞,学得更顺利。这个《Python开发App实战》分为四个部分。第一部分是Kivy的入门教程,第二部分是基于Kivy实现一个带定时器和秒表功能的手表,第三部分是基于Kivy实现一个科学计算器,第四部分是Kivy对移动设备的封装和移植。Blogger的前三部分已经完成。虽然第四部分比较简单,但是一个比较方便的方法就是使用Kivy提供的Buildozer来打包。因为博主实验室的网络最近一直瘫痪,唯一的ubuntu设备无法使用。Blogger已经在他的macbook上打包了很多次,但是因为一些不为人知的原因,没有成功。在ubuntu的虚拟机上打包也表示内存空间不足,所以想等实验室网络恢复后,在打包移植成功后再更新第四部分。
开发环境如下:
python:3 . 6 . 6 Kivy:1 . 11 . 1 OS:Mac OS(Ubuntu natural ok)IDE:py charm edu了解Kivy。好了,言归正传。
Kivy于2011年初首次发布。跨平台Python框架可以部署到Windows、Mac、Linux和Raspberry Pi上。除了传统的键盘和鼠标输入,它还支持多点触摸事件。Kivy甚至支持图形的GPU加速,因为它们是用OpenGL ES2构建的。Kivy使用MIT许可证,所以你可以免费使用这个库和商业软件。
Kivy不会尝试使用原生控件或小部件。它所有的widgets都是定制的,所以用Kivy开发的App的GUI在所有平台上都是一样的,但是缺点可能是你开发的App的GUI会和用户的原生应用不一样。
安装Kivy Kivy有很多依赖,建议安装在Python虚拟环境下。从来不劝阻没用过虚拟环境的人。下面是对虚拟环境的简要介绍:
虚拟环境可以理解为一个专用的一块环境,它独立于你的系统的环境,因为实际项目中可以根据不同的需求或者库需要不同版本的依赖关系。比如有的项目需要Python2,有的项目需要Python3,有的项目使用Tensorflow1.10,有的项目使用Tensorflow2.0,通过使用虚拟环境,各个项目可以完美独立,避免了每次都要更换整个系统环境的版本。用过Pycharm的同学在软件设置里可以理解为project interpreter。每次创建项目时,都可以重新安装依赖项。这其实就是所谓的虚拟环境。
如果只是用于一个项目,不打算深入了解,可以使用Python内置的venv库或者virtualenv包。本教程是使用venv库实现的。
首先导航到您创建项目的目录,并在终端中输入以下指令来创建虚拟环境:
Python3 -m venv my_kivy_project就这样成功的创建了my_kivy_project的一个文件夹,并在目录下创建了一个虚拟环境。
接下来,按照以下说明激活环境:
在源的白开水/激活被激活后,你的终端应该看起来像这样:
(my_kivy_project)你的电脑名:my_kivy_project你的用户名$不用的时候,输入deactivate退出即可。
接下来,在激活的虚拟环境中安装Kivy。如果已经安装了pip,可以输入以下说明,否则需要先安装pip:
Python -m pip安装kivy如果安装成功完成,可以进入pip列表,看到里面有kivy。
用Kivy的标签认识Hello World每个人在学习语言之前都是从Hello World开始的,所以我们今天对Kivy的介绍也是从Hello World开始的。
创建一个main.py或其他名称。想有人陪伴的羊可以进入下面的节目,可以看到Hello World。可以使用Pycharm IDE进行编程,然后在虚拟环境中运行python main.py。
从kivy.app导入app从kivy.uix.label导入Label class main App(App):def build(self):Label=Label(text= Hello World ,size_hint=(.5, 5),Pos _ hint={center _ x:5, center _ y:5})返回Label if _ _ name _= _ _ main _ :App=main App()App . run()运行完。py文件,如果没有错误的话应该可以看到这个界面。
每个Kivy应用都需要继承app类,重写build()函数。在这里,您可以编写自己的UI代码或调用定义UI代码的其他函数。这一次,创建一个标签小部件,并通过定义text、size_hint和pos_hint的值告诉Kivy要使用的比例和小部件的位置。其中两个数字size_hint的含义是:
第一个数字是X大小提示,它指的是控件的宽度。
第二个数字是Y大小提示,它指示控件的高度。
这两个数字的范围是从0到1。两个提示的默认值都是1。
pos_hint的两个值的含义可以参考size_hint。上面代码中的两个. 5将使label小部件在X和Y轴上居中。
布局UI Kivy提供了很多组件,比如BoxLayout,TextInput,Button,还有这次用的标签。可以根据自己的需求设计UI,然后添加组件。在官网可以看到相应的组件功能,除了BoxLayout之外还有AnchorLayout和FloatLayout。你可以尝试一下。
接下来我们用BoxLayout和Button给大家做一个简单的UI演示,这是后期开发中使用频率最高的。
尝试下面的代码。
from kivy . App import App from kivy . uix . button import button from kivy . uix . box Layout import BoxLayout class BoxLayout example(App):def build(self):Layout=box Layout(orientation= vertical ,spacing=15,Padding=10)# Create Layout buttons=[str(I)for I in range(7)]# Set the label for I in range(7):button=button(text=buttons[I],size _ hint=(.5),Pos _ hint={ center _ x : 5,Add _ widget (button) #将键添加到布局返回布局if _ _ name _= _ _ main _ :app=boxlayoutExample()app . run。
参考Hello World中的代码解释和这段代码中的注释,我们大概可以理解为,首先继承App类,然后重写build()函数,在函数中创建一个BoxLayout,然后以字符的形式为按钮创建一个标签,再用循环将按钮添加到布局中。你可以在出现的界面上点击数字0-6,可以发现确实是一个键,按下去可以弹出来。
应该注意创建BoxLayout时使用的方向、间距和填充的局部变量。它们的含义如下:
填充:布局和xsdqc元素之间的填充像素可以通过以下三种方式之一指定:
1.四个参数的列表:[padding_left,padding_top,padding_right,padding_bottom]
2.两个参数的列表:[padding_horizontal,padding_vertical]
3.单参数:padding=10spacing:您可以使用该参数在子部件之间添加空间。方向:您可以将默认方向的BoxLayout从水平更改为垂直。BoxLayout的其他参数也可以在官网看到它们的含义和用法。官方手册是一个很好的工具,可以好好利用,练习英语。
添加事件和大多数GUI工具包一样,Kivy主要基于事件,可以响应用户的按键、鼠标事件和触摸事件。除此之外,Kivy还有时钟事件。
Kivy还有与属性匹配的EventDispatcher概念。属性可以帮助您进行验证检查。它们还允许您在小部件改变大小或位置时触发事件。
以上面的按键为例,我们可以通过定义on_press_button()函数来定义按键后的回调函数,然后使用可感知的白开水d()函数将对应的事件绑定到定义的回调函数中。让我们定义一个回调函数来打印出哪个键被按下了,绑定事件的对应键被按下了。添加绑定事件和回调函数的代码片段如下:
from kivy . App import App from kivy . uix . button import button from kivy . uix . box layout import BoxLayout class BoxLayout example(App):def build(self):layout=box layout(orientation= vertical ,spacing=15,Padding=10)# Create layout buttons=[str(I)for I in range(7)]# Set the label for I in range(7):button=button(text=buttons[I],size _ hint=(.5),pos _ hint={ Center _ x :5,5,白开水d (on _ press=self。on _ press _ button)布局。Add _ widget (button) #将键添加到布局返回布局def on _ press _ button (self,Instance): print(你按了{}键。format(instance . text))if _ _ name _= _ _ main _ :app=boxlayoutexample()app . run()运行后出现的界面和上面的UI例子一样,因为我们没有修改UI的布局,不同的是按键后触发on_press事件,绑定了我们定义的回调函数,所以回调函数中的代码段被执行,在终端中可以看到你按了*键的提示。
KV语言布局UI不仅可以如上实现,Kivy还提供了一种叫做KV的设计语言。可以用KV语言实现UI布局。别告诉我是不是新语言。博主一开始就被人说得天花乱坠,但其实学得很快,因为虽然是语言,但毕竟是用来设计UI界面的,很容易上手。
用KV语言实现UI布局可以创建一个名为* * * *的文档实现。kv,或者可以在原中添加kivy.bulid.Builder.load_string()函数。py文件,并在该函数中添加代码片段。完整的过程如下:
从kivy.app导入app从kivy.uix.button导入按钮从kivy.uix.boxlayout导入boxlayout从kivy.lang导入builder builder . load _ string( m y layout box layout:orientation: vertical 间距:15填充:38 Button:id:0 text: 0 size _ hint:(. 5, 5) pos_hint:{center_x:5, center _ y : 5 } on _ press:root . on _ press _ Button(self . text)Button:id:1 text: in_ _ init _ _(* kwargs)def on _ press _ button(self,Instance): print(您按了{}键。format(instance))class boxlayout example(app):def build(self):returnmy layout()上面这段代码的UI和功能与前面这段没有KV语言的代码完全一样。可以运行一下试试。注意,需要创建的myLayout类继承了BoxLayout,myLayout类应该在主App类的build()函数中返回,这样kivy就知道布局了哪个UI。
细心的同学可以发现,KV语言定义的按钮中加入了属性id。有了这个属性,就可以通过self.ids[id]操作相应的组件。虽然在这个例子中没有用到,但是后面的例子中会用到,所以这里有个准备。使用KV语言的好处是UI布局更加直观易读。缺点是很多功能相同的代码段重复出现。虽然可以复制粘贴,但还是做手工。在实际应用中,可以根据自己的需要选择使用或不使用KV语言。
有了这些基础,学习使用官方手册,应该已经开始Kivy了,可以根据自己的需求实现APP的UI。入门章节到此结束,我们将从下一章的开头开始APP的实际开发!
文末,如有误解,欢迎留言交流。如需转载,请注明出处。
如果你听不懂,那一定是我的演讲太差了。请留言,我会继续努力。
手动码字码和图形码。如果对你有帮助,请留下赞。谢谢你。
以上。
如何使用CSS设置div半透明有效历史中提交的图片或压缩文件
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。