『Python Kivy』API说明:kivy.app.App

摘要:
importkivykivy.requirefromkivy.appimportAppfromkiv.uix.gridayoutimportGridLayoutClassIndexScreen:def__init__:super.__init__Pass#您不能直接使用App作为自己创建的应用程序类的类名,classTestApp:defbuild:returnIndexScreen()if__name__=='__main__':TestApp()。run()使用kv文件创建应用程序。您还可以使用kivy语言创建应用程序。#:kivy1.8.0按钮:size:root.sizetext:“你好,世界”importkivykivy.requirefromkivy.appimportAppclassMyApp:spassif_name__=='__main__':MyApp。run()应用程序配置使用配置文件Kivy支持为应用程序创建独立的配置文件,如下所示:classMyApp:defbuild_ Config:Config.setdefaults系统将_ Config方法中提供的信息自动创建名为my.ini的文件并设置相应的配置信息。存储OpenGL数据的机制未在Kivy中实现。

App类是创建Kivy应用的基础。我们可以将其看成是Kivy运行循环当中的主入口。在绝大多数的例子中,你创建这个类的子类,然后构建你自己的应用。当你已经准备好开始应用的整个生命周期时,你可以实例化你定制的app类,然后调用这个实例的run()方法。

创建一个应用

重载build()方法

为了使用一个widget树初始化你的应用,你需要重载build()方法,并返回你已经构建的widget树。

import kivy
kivy.require('1.8.0')

from kivy.app import App
from kivy.uix.gridlayout import GridLayout

class IndexScreen(GridLayout):
    def __init__(self, **kwargs):
        super(IndexScreen, self).__init__(**kwargs)
        pass

# 这里不能直接使用App作为你自己创建的应用类的类名
class TestApp(App):
    def build(self):
        return IndexScreen()

if __name__ == '__main__':
    TestApp().run()

使用kv文件创建应用

你也可以使用kivy语言创建应用。.kv文件可以同时包含规则以及根widget定义。

#:kivy 1.8.0

Button:
    size: root.size
    text: "Hello ,World"
import kivy
kivy.require('1.8.0')

from kivy.app import App

class MyApp(App):
    pass

if __name__ == '__main__':
    MyApp.run()
应用配置

使用配置文件

Kivy支持为你的应用创建独立的配置文件,如下所示:

class MyApp(App):
    def build_config(self, config):
        config.setdefaults('section1', {
            'key1': 'value1',
            'key2': 'value2'
            })

系统将根据build_config方法中所提供的信息,自动创建名为my.ini的文件,并设置对应的配置信息。

[section1]
key2 = value2
key1 = value1

你也可以不使用build_config方法,而是直接创建my.ini文件,应用在运行的时候会自动加载这一文件。需要注意的是,配置文件的名字需要与你的应用类的前缀相匹配。

示例:应用设置面板

你可以扩展App.build_settings()方法创建你自己的设置面板。你可以参考settings找到具体创建的方法。

class MyApp(App):
    def build_settings(self, settings):
        jsondata = """
            [
                { "type": "title",
                  "title": "Test application" },

                { "type": "options",
                  "title": "My first key",
                  "desc": "Description of my first key",
                  "section": "section1",
                  "key": "key1",
                  "options": ["value1", "value2", "another value"] },

                { "type": "numeric",
                  "title": "My second key",
                  "desc": "Description of my second key",
                  "section": "section1",
                  "key": "key2" }
            ]
        """
        settings.add_json_panel('Test application', self.config, data=jsondata)

当你运行起来后,可以使用F1来启动设置面板。使用JSON的设置选项,将与之前创建的配置文件的内容相关联。你也可以在程序中调用App.open_settings()App.close_settings()来开启或关闭你的设置面板。你在设置面板中的设置,将会自动保存到你的配置文件中。默认的,kivy的全局设置也会被加载到设置面板中,你可以使用如下声明关闭它:

class MyApp(App):
    use_kivy_settings = False
    # ...

你还可以手动的调整设置面板中的项目,具体参见settings

使用on_start 与 on_stop检测应用性能

参见cProfile

import cProfile

class MyApp(App):
    def on_start(self):
        self.profile = cProfile.Profile()
        self.profile.enable()

    def on_stop(self):
        self.profile.disable()
        self.profile.dump_stats('myapp.profile')
定制设置界面

你可以通过设置App.settings_cls来选择多种不同的设置界面样式,你还可以创建自己的设置界面。具体参考kivy.uix.settings

你可以通过重载App.display_settings()来定制设置面板的显示,这个方法将会在设置面板在屏幕上显示之前被调用。如下所示:

def display_settings(self, settings):
    try:
        p = self.settings_popup
    except AttributeError:
        self.settings_popup = Popup(content=settings,
                                    title='Settings',
                                    size_hint=(0.8, 0.8))
        p = self.settings_popup
    if p.content is not settings:
        p.content = settings
    p.open()

def close_settings(self, *args):
    try:
        p = self.settings_popup
        p.dismiss()
    except AttributeError:
        pass # Settings popup doesn't exist

最后,如果你想要替换目前的设置面板,你使用App.destroy_settings()可以移除到设置面板的内部索引。如果你已经更改App.display_settings(),你应该小心探测设置面板是否已经被替换。

暂停模式

这个模式是尝试性的,被设计用来针对手机与平板。可能会引起你的应用崩溃或者暂停。

在手机或者平板上,用户可能在任意的时候切换到另一个应用当中,这个时候,默认的,kivy会激活App.on_stop()事件。

如果你提供暂停模式,当切换到另一个应用的时候,你的应用将无限等待,直到用户切换回来。在Android上,有一个OpenGL的问题:当你暂停的时候,OpenGL ES Context不能确保被存储。存储OpenGL数据的机制并没有在Kivy中实现。

下面是一个暂停模式的示例:

class TestApp(App):

   def on_pause(self):
      # 你可以在这个存储数据
      return True

   def on_resume(self):
      # 在这里你可以检查是否有需要替换的数据
      pass
参考

免责声明:文章转载自《『Python Kivy』API说明:kivy.app.App》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇『Python Kivy』Kivy模板语言KV说明『Golang』Go简介以及环境搭建下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android平台下实现音视频通信的应用开发

现在安卓很是火热,一大堆开发人员在捣鼓安卓平台的开发,相信大家也使用过QQ的语音视频对话功能,但是不知道大家有没有试过自己来开发一个基于安卓平台的音视频即时通讯的应用,这个应用必须能够做到跨平台 兼容Google、HTC、Moto、Samsung等主流硬件设备 支持iOS、Web、PC等设备和Android之间的互联互通 视频会话时,默认打开前置摄像头...

RHCE第1课

Linux行业最重要的精神:开源共享精神 开源软件的好处: 1.低风险 2.高品质 3.低成本 4.更透明 开源许可协议的5个自由: 1.使用自由 开源软件可以任意使用。 2.复制自由 允许把软件复制到任何人的电脑中,并且不限制复制的数量。 3.传播自由 允许软件以各种形式进行传播。 4.收费自由 允许在各种媒介上出售该软件,但必须让买家知道这个软件是可...

人生苦短,我用Python(1)

一、人生苦短,我用Python 在文章的开头给大家介绍一下Python语言,作者Guido von Rossum。对,就是图中的“人生苦短我用Python”那哥们。你可能以为我会用很多文字介绍Python,不,你错了。因为Python这么火,现在还有人不知道吗?话不多说,直接上图! TIOBE2019年一月发布的排行榜显示,python获得201...

20180320作业1:源代码管理工具调查——15100216

一、 找出并了解当前较为流行的几种源代码管理工具(至少三种) 1、Visual Source Safe( 简称 VSS ) VSS是微软的产品,是配置管理的一种很好的入门级的工具。VSS最初的名字叫Source Safe,是一家小公司的产品,92年曾经获了最佳小型管理工具奖,然后立即被微软收购。但是微软收购的只是source safe的Windows版本,在...

课后作业P18

建立Github P18 第四题 我选择Web APP、Mobile Apps、Operating Systems Web APP:webapp 框架是一种简单的与WSGI兼容的网络应用程序框架,可以与 App Engine 配合使用。不必为了使用 App Engine 而使用 webapp:网络服务器支持任何使用 CGI 的 Python应用程序。web...

Java RPC 框架 Solon 1.3.1 发布,推出Cloud接口与配置规范

Solon 是一个微型的Java RPC开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,3500多次的commit;内核保持0.1m的身材,超高的跑分,良好的使用体验。支持:Rpc、Rest api、Mvc 多种开发模式。 Solon 强调:克制 + 简洁 + 开放的原则;力求:更小、更快、更自由的体验。 项目地址: https://git...

最新文章