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 应用了!

运行这段代码,将显示出一个黑色的窗口。虽然简单,但已经是一个标准的窗口了。你可以移动窗口、改变窗口大小、最大化、最小化,以及关闭窗口。

image

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

运行修改后的程序,乍看上去,似乎是窗口的背景从黑色变成了灰色。实际上是整个窗口被一个巨大的按钮填满了,不信你用鼠标点击试试?看到背景颜色变化了吗?这表明,你点击的是一个巨大的按钮,而不是窗口本身。

image

第 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 个分量。

image

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

运行程序,我们看到窗口左下角显示了一些字符串。

image

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

image

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

image

最后,让咪博士为大家讲解一下代码吧。

第 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/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容