网站做微信链接怎么做的,石桥铺网站建设公司,怎么解决360导航的网站建设,创意设计包装写在最前#xff1a;
开发App的主流语言中应该是Java#xff0c;但是苦于没有学过Java但目前又没那么多时间重新学#xff0c;因此就想着用已经入门的Python开发两个App练手#xff0c;学习的过程中看过很多资料#xff0c;也踩过很多坑#xff0c;于是就想着将自己的经…写在最前
开发App的主流语言中应该是Java但是苦于没有学过Java但目前又没那么多时间重新学因此就想着用已经入门的Python开发两个App练手学习的过程中看过很多资料也踩过很多坑于是就想着将自己的经验写出来分享给大家希望大家可以少踩些坑更顺利地学习。本次《Python开发App实战》总共分为4个部分第一部分是Kivy的入门教程第二部分是基于Kivy实现一个具有计时器和秒表功能的表第三部分是基于Kivy实现一个科学计算器第四部分是Kivy向移动设备的打包移植。前三个部分博主是已经完成的虽然第四部分相对简单但是比较方便的一种方法是使用Kivy提供的Buildozer打包由于博主研究室的网络最近处于瘫痪状态因此唯一一台ubuntu设备无法使用博主在自己的macbook上打包了好多次也因为一些不知原因的问题没有成功在ubuntu的虚拟机上打包又提示内存空间不足因此想等到研究室网络恢复打包移植成功后再更新第四部分。
本次开发的环境如下
Python: 3.6.6
Kivy: 1.11.1
OS: MacOS(Ubuntu自然ok)
IDE:Pycharm EDU了解Kivy
好了开始正题。 Kivy于2011年初首次发布。该跨平台的Python框架可以部署到WindowsMacLinux和树莓派上。它除了常规的键盘和鼠标输入外还支持多点触控事件。Kivy甚至还支持其图形的GPU加速因为它们是用OpenGL ES2构建的。Kivy使用的是MIT许可证因此你可以将该库用于免费和商业软件。
Kivy不会尝试使用本机控件或小部件。它的所有小部件都是定制的因此用Kivy开发的App在所有平台上的GUI都是一样的不过缺点可能就是你开发的App的GUI将与用户的本机应用程序不同。
安装Kivy
Kivy具有许多依赖关系建议将其安装到Python虚拟环境中。没有用过虚拟环境的千万不要劝退这里简单的介绍一下虚拟环境
虚拟环境可以理解于开辟出来的专用的一块环境它独立于你系统的环境因为在实际项目中可以根据需求或者库不同需要不同版本的依赖关系比如有的项目要用Python2有的要用Python3有的用Tensorflow1.10有的用Tensorflow2.0。使用虚拟环境就可以将每个项目完美地独立起来避免的每次需要把系统整体环境的版本改来改去。用过Pycharm的同学可以理解为软件设置里的project interpreter你可能每次创建一个工程都会重新安装依赖这其实就是所谓的虚拟环境。
如果你只是用来做项目而不打算深入了解它你可以使用Python的内置venv库或virtualenv包。本次教程就使用venv库实现。
先导航到你创建项目的目录下在terminal输入以下指令创建虚拟环境
python3 -m venv my_kivy_project这样就创建成功了一个my_kivy_project的文件夹并且在目录下创建了虚拟环境。 接下来用以下指令来激活环境
source bin/activate激活之后你terminal应该变成了这样
(my_kivy_project) 你的计算机名:my_kivy_project 你的用户名$不用的时候输入deactivate退出即可。
接下来在激活后的虚拟环境中安装Kivy如果你已经安装过pip即可以输入以下指令否则你需要先安装pip
python -m pip install kivy如果顺利安装完成后你就可以输入pip list然后看到其中有kivy了。
用Kivy的Label实现Hello World
大家学语言之前都是用Hello World开始的吧那我们今天入门Kivy也从Hello World开始。 创建一个main.py或者其他的什么命名在里面输入以下程序你就可以看到Hello World了你可以使用Pycharm这个IDE来编程在然后在虚拟环境中python main.py来运行。
from kivy.app import App
from kivy.uix.label import Labelclass mainApp(App):def build(self):label Label(textHello World, size_hint(.5, .5),pos_hint{center_x: .5, center_y: .5})return labelif __name__ __main__:app mainApp()app.run()运行完.py文件后如果没有出现错误你应该可以看到这个界面
每个Kivy应用程序都需要继承App类和重写build()函数。在这里你可以编写自己的UI代码或调用定义UI代码的其他函数。这次创建一个Label窗口小部件并通过定义textsize_hint和pos_hint的数值告诉Kivy创建小部件时要使用的比例和部件的位置。其中size_hint两个数字的含义是
第一个数字是x大小提示指的是控件的宽度。 第二个数字是y大小提示表示控件的高度。
这两个数字范围为0到1。两个提示的缺省值都是1。 pos_hint两个值的意思可以参考size_hint上面的代码中的两个.5是将label这个部件(widget)在x和y轴上居中。
布置UI
Kivy提供了很多的部件在接下来的项目中比较常用到的有BoxLayoutTextInput Button还有本次用到的Label等大家可以根据自己的需求设计UI然后添加部件在官网上都可以看到相应的部件函数如Layout里除了BoxLayout还有AnchorLayoutFloatLayout等大家可以去用用试试看。 接下来我们就用之后的开发中用的最频繁的BoxLayout和Button来给大家做一个简单的UI演示。
尝试以下的代码
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayoutclass boxLayoutExample(App):def build(self):layout BoxLayout(orientationvertical, spacing15, padding10) #创建Layoutbuttons [str(i) for i in range(7)] #设置按键的标签for i in range(7):button Button(textbuttons[i], size_hint(.5, .5),pos_hint{center_x: .5, center_y: .5})layout.add_widget(button) #将按键加入到Layout中return layoutif __name__ __main__:app boxLayoutExample()app.run()如果运行之后没有错的话你将看到如下的界面
参考Hello World部分的代码解释以及本次代码中的注释我们大概可以理解首先继承App类然后重写build()函数在函数中创建一个BoxLayout然后以字符的形式为按钮创建标签接着用一个循环将按钮添加到Layout中即可。可以在出现的界面上点一下0-6的数字可以发现确实是按键可以按下可以弹起。
需要注意的是创建BoxLayout的时候里面用到的orientationspacingpadding的局部变量它们的含义如下
padding可以通过以下三种方式之一指定Layout及其子元素之间的填充像素 1.四参数列表 [padding_leftpadding_toppadding_rightpadding_bottom] 2.两个参数的列表 [padding_horizontalpadding_vertical] 3.单个参数 padding10spacing可以使用此参数在子窗口小部件之间添加空间。orientation可以更改默认orientation的BoxLayout从水平到垂直。
其他BoxLayout的参数也可以在官网上看到其含义和使用方法官方手册是很好的工具大家可以好好利用顺便锻炼一下英语。
添加事件
和大多数GUI工具包一样Kivy主要基于事件它可以响应用户的按键鼠标事件和触摸事件此外Kivy还具有时钟的事件。
Kivy也有Properties与之搭配的概念EventDispatcher。属性可帮助您进行验证检查。它们还使您可以在小部件更改大小或位置时触发事件。
承接上面的按键的例子我们可以通过定义on_press_button()函数来定义按键后的回调函数然后用bind()函数来将该相应的事件绑定到定义的回调函数上。我们就来定义一个回调函数用来打印出是哪个按键被按下绑定的事件的相应的按键被按下添加绑定事件和回调函数的代码段如下所示
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayoutclass boxLayoutExample(App):def build(self):layout BoxLayout(orientationvertical, spacing15, padding10) #创建Layoutbuttons [str(i) for i in range(7)] #设置按键的标签for i in range(7):button Button(textbuttons[i], size_hint(.5, .5),pos_hint{center_x: .5, center_y: .5})button.bind(on_pressself.on_press_button)layout.add_widget(button) #将按键加入到Layout中return layoutdef on_press_button(self, instance):print(你按下了{}键.format(instance.text))if __name__ __main__:app boxLayoutExample()app.run()
运行完后出现的界面跟上面UI的例子相同因为我们没有修改UI的布置不同的是因为按下按键后触发了on_press事件该事件绑定了我们定义的回调函数因此回调函数中的代码段就被执行就可以在terminal看到你按下了*键的提示。
KV语言
布局UI不仅可以像上文介绍的那样实现Kivy还提供了一种称为KV的设计语言你可以用KV语言实现UI布局。不要看到是一门新的语言就劝退博主一开始就被劝退了但实际上学起来还是很快的因为它虽然是一个语言但毕竟用来设计UI界面的所以入门也比较简单。
使用KV语言来实现UI布局可以创建一个名为***.kv的文档实现也可以在原来的.py文件中添加kivy.bulid.Builder.load_string()函数在该函数中添加代码段。完整的程序如下
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import BuilderBuilder.load_string(
myLayoutBoxLayout:orientation:verticalspacing:15padding:38Button:id:0text:0size_hint:(.5, .5)pos_hint:{center_x: .5, center_y: .5}on_press:root.on_press_button(self.text)Button:id:1text:1size_hint:(.5, .5)pos_hint:{center_x: .5, center_y: .5} on_press:root.on_press_button(self.text)Button:id:2text:2size_hint:(.5, .5)pos_hint:{center_x: .5, center_y: .5} on_press:root.on_press_button(self.text)Button:id:3text:3size_hint:(.5, .5)pos_hint:{center_x: .5, center_y: .5} on_press:root.on_press_button(self.text)Button:id:4text:4size_hint:(.5, .5)pos_hint:{center_x: .5, center_y: .5} on_press:root.on_press_button(self.text) Button:id:5text:5size_hint:(.5, .5)pos_hint:{center_x: .5, center_y: .5} on_press:root.on_press_button(self.text)Button:id:6text:6size_hint:(.5, .5)pos_hint:{center_x: .5, center_y: .5} on_press:root.on_press_button(self.text)
)
class myLayout(BoxLayout):def __init__(self, **kwargs):super(myLayout, self).__init__(**kwargs)def on_press_button(self, instance):print(你按下了{}键.format(instance))class boxLayoutExample(App):def build(self):return myLayout()用以上的代码段与之前不用KV语言的代码段的UI和功能完全相同大家可以运行一下试试。需要注意创建的myLayout类中继承了BoxLayout并且在主App类的build()函数中要返回myLayout类这样kivy才知道布置的UI是哪个。
细心的同学可以发现在KV语言中定义的按钮中添加了id的属性有了这个属性后就可以通过self.ids[id]来对相应的部件进行操作虽然本次的例子中没有用到但后面的例子会用到在此先做个铺垫。用了KV语言的好处就是UI布置起来更直观更符合易读缺点就是很多功能相同的代码段重复出现虽然可以复制粘贴但毕竟还是体力活。在实际应用中大家可以根据自己的需求选择用或者不用KV语言。
有了以上这些基础加上学会使用官方手册就应该已经入门Kivy了可以根据自己的需求来实现APP的UI了。入门篇到此结束下一篇开始我们就开始APP的开发实战
写在最后
如果有哪里理解错的地方欢迎大家留言交流如需转载请标明出处。
如果你没看懂一定是我讲的不好欢迎留言我继续努力。
手工码字码图码代码如果有帮助到你的话留个赞吧谢谢。
以上。