一 、Kivy简单使用

1. 创建一个kivy应用程序很简单包括:

  • 对应用程序类进行子分类
  • 实现其build() 方法,以便返回小部件实例(小部件树的根)
  • 实例化该类,并调用其run()  方法。

下面是一个最小应用程序的示例:

import kivy kivy.require('1.0.6') #替换为你当前的kivy版本! from kivy.app import App from kivy.uix.label import Label class MyApp(App): def build(self): return Label(text='Hello world') MyApp().run()

您可以将其保存到一个文本文件中,例如,main.py,并运行它。

 

2.kivy应用程序生命周期

首先,让我们熟悉一下Kivy应用程序的生命周期

kivy 生成 android 应用 kivy使用教程_kivy 生成 android 应用

正如您在上面所看到的,无论如何,我们进入应用程序的入口点是run()方法,在我们的例子中是“MyApp()。run()”。我们会回到这个问题,解释每行:

from kivy.app import App

它要求您的应用程序的基类继承自应用程序类。它现在就存在于kivy_installation_dir/kivy/app.py之中

from kivy.uix.label import Label

这里需要注意的一件重要的事情是软件包/类的布局方式。uix模块是包含布局和小部件等用户界面元素的部分。

class MyApp(App):

这就是我们定义Kivy应用程序的基类的地方。只需要在这一行中更改你的应用程序MyApp的名称。

def build(self):

如上图所突出显示的,显示了Kivi应用程序生命周期的外壳,这是您应该初始化并返回根小部件的函数。这是我们在第8行中所做的:

return Label(text='Hello world')

这里我们用文本“Hello World”初始化一个标签并返回其实例。此标签将是此应用程序的根小部件。

 

运行后效果:

kivy 生成 android 应用 kivy使用教程_kivy 生成 android 应用_02

3. 自定义应用程序

GridLayout 网格布局模块:当需要将控件排列成表格状时。可以使用GridLayout布局方式,根据布局的配置,子控件按照自己的索引顺序被分配位置。

例:让我们稍微扩展一下这个应用程序,比如一个简单的用户名/密码页面。

代码:

from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.uix.label import Label from kivy.uix.textinput import TextInput class LoginScreen(GridLayout): def __init__(self,**kwargs): super(LoginScreen,self).__init__(**kwargs) self.cols = 2 self.add_widget(Label(text='User Name')) self.username = TextInput(multiline=False) self.add_widget(self.username) self.add_widget(Label(text='password')) self.password = TextInput(password=True,multiline=False) self.add_widget(self.password) class MyApp(App): def build(self): return LoginScreen() if __name__ == '__main__': MyApp().run()

 

 

运行展示:

kivy 生成 android 应用 kivy使用教程_kivy 生成 android 应用_03

 

尝试重新调整窗口的大小,你会看到屏幕上的小部件会根据窗口的大小进行调整,而不需要做任何事情。这是因为小部件在默认情况下随窗口自动调整大小。上面的代码不处理来自用户的输入,没有验证或其他任何东西。我们将在接下来的章节中更深入地研究这个问题和小部件的大小和定位。

 

二、环境控制

许多环境变量可用于控制Kivy的初始化和行为。例如,为了将文本渲染限制为PIL实现:

$ KIVY_TEXT=pil python main.py

在导入kivy之前,应设置环境变量:

import os os.environ['KIVY_TEXT'] = 'pil' import kivy

 

2.1 控制路径的环境变量

在1.0.7版本中的新版本。您可以控制配置文件、模块和kivy数据所在的默认目录。

 

KIVY_DATA_DIR: Kivy数据的位置,默认为<Kivy路径>/数据

KIVY_MODULES_DIR: Kivy模块的位置,默认为<kivy路径>/模块

KIVY_HOME:kivy的家目录。此目录用于本地配置,并且必须位于可写的位置。

默认值:

Desktop: <user home>/.kivy

Android: <android app path>/.kivy

iOS: <user home>/Documents/.kivy

KIVY_SDL2_PATH:如果设置,编译kivy时将使用此路径中的SDL2库和头,而不是系统范围内安装的库和头。要在运行kivy应用程序时使用相同的库,必须在path环境变量的开头添加此路径。

 

2.2 配置文件的环境变量

KIVY_USE_DEFAULTCONFIG:如果在环境中找到这个名称,Kivy将不会读取用户配置文件。

KIVY_NO_CONFIG:如果设置,则不会读取或写入任何配置文件。这也适用于用户配置目录。

KIVY_NO_FILELOG:如果设置,日志将不会打印到文件中。

KIVY_NO_CONSOLELOG:如果设置,日志将不会打印到控制台

KIVY_NO_ARGS:如果设置为其中一个(“true”、“1”、“yes”),则在命令行中传递的参数将不会被Kivy解析和使用。例如,您可以安全地使用您自己的参数创建一个脚本或应用程序,而不需要-分隔符:

 

例:

import os os.environ["KIVY_NO_ARGS"] ='1' import kivy

 

 

KCFG_section_key:映射到配置对象。它们在导入kivy时只加载一次。可以使用KIVY_NO_ENV_CONFIG禁用该行为。(1.11.0版本及之后的新版本)

例:

import os os.environ["KCFG_KIVY_LOG_LEVEL"] = "warning" import kivy # during import it will map it to: # Config.set("kivy", "log_level", "warning")

 

KIVY_NO_ENV_CONFIG:如果设置,则任何环境键将不会映射到配置对象。如果未设置,任何KCFG_section_key=值 都将被映射到配置

 

2.3 kivy核心限制环境控制具体实现

kivy.core 尝试为您的平台选择最佳的实现。对于测试或自定义安装,您可能希望将选择器限制在特定的实现中。

 

KIVY_WINDOW:用于创建窗口的实现

   默认值: sdl2, pygame, x11, egl_rpi

KIVY_TEXT:要用于渲染文本的实现

   默认值:sdl2, pil, pygame, sdlttf

KIVY_VIDEO:用于渲染视频的实现

   默认值:gstplayer, ffpyplayer, ffmpeg, null

KIVY_AUDIO:用于播放音频的实现

   默认值:sdl2, gstplayer, ffpyplayer, pygame, avplayer

KIVY_IMAGE:用于读取图像的实现

   默认值:sdl2, pil, pygame, imageio, tex, dds, gif

KIVY_CAMERA:用于读取照相机的实现

   默认值: avfoundation, android, opencv

KIVY_SPELLING:要用于拼写的实现

   默认值:enchant, osxappkit

KIVY_CLIPBOARD:用于剪贴板管理

   默认值:sdl2, pygame, dummy, android

 

2.4 Metrics设置(指标设置)

KIVY_DPI:如果设置,该值将用于Metrics.dpi。

   体现在 1.4.0.及以后的版本中

KIVY_METRICS_DENSITY:如果设置,该值将用于Metrics.density。

   体现在1.5.0.及以后的版本中

KIVY_METRICS_FONTSCALE:如果设置,该值将用于Metrics.fontscale。

   体现在1.5.0.及以后的版本中

 

2.5Graphics设置(图形设置)

KIVY_GL_BACKEND: 要使用的OpenGL后端。

KIVY_GL_DEBUG: 是否记录OpenGL调用。

KIVY_GRAPHICS  是否使用OpenGLES2。

KIVY_GLES_LIMITS 是否强制执行GLES2限制(默认值,或如果设置为1)。如果设置为false,Kivy将不会真正兼容GLES2。

以下是当设置为true时可能导致的潜在不兼容性的列表。

 

Mesh

in

dices

如果为真,则网格中的索引数被限制为65535

 

Tex

ture

blit

当对纹理进行点选时,数据(颜色和缓冲区)格式必须与创建纹理时使用的格式相同。在桌面上,不同颜色的转换由驱动程序正确处理,而在Android上,大多数设备都无法做到这一点。参考文献:https://github.com/kivy/kivy/issues/1600

   体现在1.8.1.及以后的版本中

 

KIVY_BCM_DISPMANX_ID: 将默认的Raspberry Pi显示更改为使用。可用值列表可在vc_dispmanx_types.h中访问。默认值为0:

• 0: DISPMANX_ID_MAIN_LCD

• 1: DISPMANX_ID_AUX_LCD

• 2: DISPMANX_ID_HDMI

• 3: DISPMANX_ID_SDTV

• 4: DISPMANX_ID_FORCE_LCD

• 5: DISPMANX_ID_FORCE_TV

• 6: DISPMANX_ID_FORCE_OTHER

 

KIVY_BCM_DISPMANX_LAYER: 更改默认的Raspberry Pi dispmanx图层。默认值为: 0

   New in version 1.10.1.

 

2.6 Event Loop (事件循环设置)

 

KIVY_EVENTLOOP 当应用程序以异步方式运行时,应使用哪个异步库。参见kivy.app了解用法示例。

 'asyncio': 当应用程序以异步的方式运行时,应该使用标准的库异步软件包。默认设置,如果没有设置。

  'trio': 当应用程序以异步方式运行时,应使用trio软件包。

  New in version 2.0.0.

 

三 、Kivy配置

 

kivy的配置文件名为config.ini,并遵循标准ini格式。

3.1 配置文件本地位置

配置文件的位置由环境变量KIVY_HOME控制:

<KIVY_HOME>/config.ini

在桌面上,操作默认为:

<HOME_DIRECTORY>/.kivy/config.ini

因此,如果您的用户名为“tito”,则文件将在此处:

• Windows: C:\Users\tito\.kivy\config.ini
• OS X: /Users/tito/.kivy/config.ini
• Linux: /home/tito/.kivy/config.ini

在Android上,默认为:

<ANDROID_APP_PATH>/.kivy/config.ini

 

如果您的应用程序名为“org.kivy.launcher”,则该文件将在这里:

/data/data/org.kivy.launcher/files/.kivy/config.ini

 

在iOS上,默认设置为:

<HOME_DIRECTORY>/Documents/.kivy/config.ini

 

3.2 本地配置

有时,只需要更改某些应用程序的配置,或者在测试Kivy的单独部分(例如输入提供程序)时更改配置。要创建单独的配置文件,只需使用以下命令:

from kivy.config import Config Config.read(<file>) # set config Config.write()

 

当单个.ini文件的本地配置不够时,例如,当您想要为garden、kivy日志和其他内容创建单独的环境时,您需要更改应用程序中的kivy_HOME环境变量以获得所需的结果:

import os os.environ['KIVY_HOME'] = <folder>

或在每次运行应用程序之前,在控制台中手动更改:

1. Windows:

set KIVY_HOME=<folder>

2. Linux & OSX:

export KIVY_HOME=<folder>

更改KIVY_HOME后,文件夹的行为将与上面提到的默认.KIVY/文件夹完全相同。

 

注:去了解每个配置项,在kivy.config模块中解释了所有的配置项。