Kivy crash 中文教程 实例入门 1. 第1个应用 Kivy App (Making a simple App)
1. 空白窗口
在 PyCharm 中创建一个名为 TutorialApp 的项目,然后在该项目中新建了个名为 tutorial_app.py 的 Python 源文件,在 PyCharm 的代码编辑器中,输入下面的代码:
from kivy.app import App class TutorialApp(App):
pass if __name__ == "__main__":
TutorialApp().run()
虽然只有寥寥数行代码,但这已经是一个可以运行的 Kivy 应用了!
运行这段代码,将显示出一个黑色的窗口。虽然简单,但已经是一个标准的窗口了。你可以移动窗口、改变窗口大小、最大化、最小化,以及关闭窗口。

第 1 行 from kivy.app import App 导入 kivy 的 App 类,它是所有 kivy 应用的基类。
我们继承 App 类,派生出TutorialApp 类(第 3, 4 行)。我们还没有给 TutorialApp 添加任何方法,但它从 App 类中继承了 kivy 应用最基本的方法,如创建窗口、设置窗口的大小和位置等。
最后,要让 kivy 应用真正跑起来,我们需要创建 TutorialApp 对象,并调用它的 run 方法(第 7 行)。
2. 添加控件 (widget)
一个光秃秃的窗口是没啥用的,我们还得在窗口上放置一些控件(widget)。Kivy 内置了丰富的控件,如按钮 (button), 复选框 (checkbox), 标签 (label), 输入框 (textinput), 滚动容器 (scrollable container) 等。
这里咱们不妨先试试比较简单的按钮控件 (button)。
from kivy.app import App
from kivy.uix.button import Button class TutorialApp(App):
def build(self):
return Button() if __name__ == "__main__":
TutorialApp().run()
运行修改后的程序,乍看上去,似乎是窗口的背景从黑色变成了灰色。实际上是整个窗口被一个巨大的按钮填满了,不信你用鼠标点击试试?看到背景颜色变化了吗?这表明,你点击的是一个巨大的按钮,而不是窗口本身。

第 2 行 from kivy.uix.button import Button 导入 kivy 的按钮控件 Button。
第 5, 6 行,我们实现了 TutorialApp 类的 build 方法(继承自 App 类)。build 方法返回一个按钮 (Button) 对象。build 方法返回的控件,在 Kivy 中,称之为“根控件” (root widget)。Kivy 将自动缩放根控件,让它填满整个窗口。这就是为什么我们会得到一个充满整个窗口的巨型按钮。
我们还可以在创建按钮时传递参数,让它变得更生动一些。
from kivy.app import App
from kivy.uix.button import Button class TutorialApp(App):
def build(self):
return Button(text='iPaoMi', background_color=(0, 0, 1, 1), font_size=150) if __name__ == "__main__":
TutorialApp().run()
例如,我们可以将按钮的背景色设置为蓝色,并在按钮上以 150 的字号,显示文字 iPaoMi (第 6 行)。其中,参数 background_color 接受的 4 元组,分别表示 RGBA 颜色的 4 个分量。

3. 多点触控
现在,我们的应用还非常地简单,几乎没有什么交互。而且,其他许多 GUI 库,例如 QT, GTK 等也可以很容易地做出类似的效果,实在看不出 Kivy 究竟有何过人之处。接下来,咪博士将向大家展示如何快速实现多点触控的操作,你将看到为什么我们说 Kivy 是为移动应用而生。
这一节中,我们将会用到 2 个 Kivy 控件:Scatter 和 Label。
- Scatter 是实现多点触控的关键,它可以方便地实现移动、缩放,以及旋转的操作
- Label 是用来显示文字的,我们将它放在 Scatter 上,从而实现对文字的移动、缩放和旋转的操作
最终,我们修改后的代码如下:
from kivy.app import App
from kivy.uix.scatter import Scatter
from kivy.uix.label import Label class TutorialApp(App):
def build(self):
s = Scatter()
l = Label(text='iPaoMi', font_size=150)
s.add_widget(l)
return s if __name__ == "__main__":
TutorialApp().run()
运行程序,我们看到窗口左下角显示了一些字符串。

我们可以用鼠标左键把左下角的字符串拖动到窗口中央。

我们可以用鼠标右键来模拟手机屏幕上多点触控的操作。用鼠标右键在字符串上点击,会显示一个红色的小圆点,表示一个触控点的位置。我们在字符串的 2 个不同位置,用鼠标右键点击,形成 2 个触控点。然后,尝试用鼠标左键去拖动字符串,你会发现字符串发生了旋转和缩放!

最后,让咪博士为大家讲解一下代码吧。
第 2, 3, 4 行分别导入 Scatter 和 Label 控件
第 7, 8 行分别创建了 Scatter 和 Label 控件实例
第 9 行 s.add_widget(l) 将 Label 控件实例添加到 Scatter 控件实例中。这样用户的操作直接影响 Scatter 控件,再由 Scatter 自动将这些影响作用到它内部的子控件(即 Label 控件)上。
第 10 行 return s 将 Scatter 实例作为根控件返回。Kivy 会自动用根控件(Scatter 实例)填充整个窗口。
Kivy 的设计中充分考虑了移动应用的交互,这是 Kivy 与其他 GUI 库 (如 QT, GTK) 最重要的区别。当然,用鼠标来模拟多点触控的操作显得很不自然。后面的教程中,咪博士将教大家,如何将 Kivy 应用打包并运行在手机上。届时,大家将真正见识到 Kivy 在移动应用开发中的威力。
原文链接:http://www.ipaomi.com/2017/11/23/kivy-crash-中文教程-实例入门-1-第1个应用-kivy-app-making-a-simple-app/
Kivy crash 中文教程 实例入门 1. 第1个应用 Kivy App (Making a simple App)的更多相关文章
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
1. 框架代码 用 PyCharm 新建一个名为 SimplePaintApp 的项目,然后新建一个名为 simple_paint_app.py 的 Python 源文件, 在代码编辑器中,输入以下框 ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):3. 随机颜色及清除按钮
1. 随机颜色 通过前面的教程,咪博士已经带大家实现了画板的绘图功能.但是,现在画板只能画出黄色的图案,还十分单调,接下来咪博士就教大家,如何使用随机颜色,让画板变得五彩斑斓. 改进后的代码如下: f ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能
1. 理解 kivy 坐标系统 上一节中,咪博士带大家实现了画板程序的基础框架,以及一个基本的自定义窗口部件(widget).在上一节的末尾,咪博士留了一道关于 kivy 坐标系统的思考题给大家.通过 ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):0. 项目简介 & 成果展示
本教程咪博士将带领大家学习创建自己的窗口部件 (widget).最终,我们完成的作品是一个简易的画板程序. 当用 kivy 创建应用时,我们需要仔细思考以下 3 个问题: 我们创建的应用需要处理什么数 ...
- wxPython中文教程 简单入门加实例
wx.Window 是一个基类,许多构件从它继承.包括 wx.Frame 构件.技术上这意味着,我们可以在所有的 子类中使用 wx.Window 的方法.我们这里介绍它的几种方法: * SetTitl ...
- wxPython中文教程入门实例
这篇文章主要为大家分享下python编程中有关wxPython的中文教程,分享一些wxPython入门实例,有需要的朋友参考下 wxPython中文教程入门实例 wx.Window 是一个基类 ...
- Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM)
Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(V 时间:2010-04-12 16:06来源:SilverlightChina. ...
- Expression Blend实例中文教程(8) - 动画设计快速入门StoryBoard http://silverlightchina.net/html/tips/2010/0329/934.html
Expression Blend实例中文教程(8) - 动画设计快速入门StoryBoard 时间:2010-03-29 11:13来源:SilverlightChina.Net 作者:jv9 点击: ...
- Python Kivy 中文教程:安装(Windows)
Kivy 是一套用于跨平台快速应用开发的开源框架,只需编写一套代码,便可运行于各大桌面及移动平台上(包括 Linux, Windows, OS X, Android, iOS, 以及 Raspberr ...
随机推荐
- linux连接iscsi存储方法
当前存储openfiler IP为 192.168.221.99 端口为3260 安装.启动iscsi rpm包 并改为开机自动运行 探测存储服务器 iscsiadm -m discovery ...
- https://leetcode.com/problems/palindromic-substrings/description/
https://www.cnblogs.com/grandyang/p/7404777.html 博客中写的<=2,实际上<=1也是可以的 相当于判断一个大指针内所有子字符串是否可能为回文 ...
- AI 随机梯度下降(SGD)
随机梯度下降(stochastic gradient descent) 梯度是期望 计算梯度耗时太长
- ASP 基础一 网站开发 初步认识
一 .ASP 与 ASP.NET的区别 i.ASP是解释型的动态语言,asp文件包含了前端和动态语言VBScript,来实现对服务器的交互,运行在IIS.PWS等WEB服务器上 II.ASP.NET是 ...
- 【UOJ 17】飞扬的小鸟
UOJ 17 题意:在\(n\times m\)的网格中有一些柱子,它们可以通过的区间是\((L_i,R_i)\),位置在\(P_i\).在第i个位置点击一次会使高度增加\(X_i\),不点击会使高度 ...
- Java发送QQ邮件
面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼.然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了. 首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop ...
- Java中没有引用传递只有值传递(在函数中)
◆传参的问题 引用类型(在函数调用中)的传参问题,是一个相当扯的问题.有些书上说是传值,有些书上说是传引用.搞得Java程序员都快成神经分裂了.所以,我们最后来谈一下“引用类型参数传递”的问题. 如下 ...
- MFC入门(三)-- MFC图片/文字控件(循环显示文字和图片的小程序)
惯例附上前几个博客的链接: MFC入门(一)简单配置:http://blog.csdn.net/zmdsjtu/article/details/52311107 MFC入门(二)读取输入字符:http ...
- CF1038E Maximum Matching 搜索/区间DP
题目传送门:http://codeforces.com/problemset/problem/1038/E 题意:给出$N$个方块,每个方块有左右两种颜色$a,b$(可以翻转使左右两种颜色交换)和一个 ...
- SpringMVC之单/多文件上传
1.准备jar包(图标所指必备包,其他按情况导入) 2.项目结构 3.SingleController.java(控制器代码单文件和多文件) package com.wt.uplaod; import ...