Kivy 简明教程

Kivy - Miscellaneous

Kivy - Exception Handling

在编程中,异常处理是指防止程序在遇到运行时错误时崩溃的机制。Kivy 提供了一个名为 ExceptionHandler 的类来管理 Kivy 或你自己的代码引发的异常。

ExceptionManager 类在“kivy.base”模块中定义。你需要从“kivy.base”导入它并访问处理 Kivy 异常的实例。可以使用此类为不同类型的异常添加自定义处理方法,或者当异常发生时覆盖 Kivy 的默认行为。例如,可以使用 handle_exception 方法记录异常、向用户显示消息或优雅地退出应用程序。

from kivy.base import ExceptionHandler, ExceptionManager
from logging import Logger

class handler(ExceptionHandler):
   def handle_exception(self, inst):
      Logger.exception('Exception caught by ExceptionHandler')
      return ExceptionManager.PASS

ExceptionManager.add_handler(handler())

一个以异常作为参数并返回以下某个值的处理函数 −

  1. ExceptionManager.PASS − 异常应被忽略,因为它已由处理程序处理。

  2. ExceptionManager.RAISE − 异常应被重新引发。

  3. ExceptionManager.USER_HANDLED − 异常已由用户处理,不应记录。

还可以使用 handle_exception 方法通过已注册的处理程序来手动处理异常。

Kivy - Resources Management

“kivy.resources”模块包括跨路径列表搜索特定资源的功能,尤其是在应用程序处理多个路径和项目时。

当 Kivy 查找图像文件或“kv”文件等任何资源时,它会搜索一组预定的文件夹。可以使用 resource_add_path() 和 resource_remove_path() 函数修改此文件夹列表。

如果你想对默认的 style.kv 或 data/defaulttheme0.png 使用任何备选方案,可以通过 resource_add_path() 方法添加所偏好备选方案的路径。

以下函数定义在“kivy.resources”模块中 −

  1. resource_add_path(path) − 添加要进行搜索的自定义路径。

  2. resource_find(filename, use_cache=False) − 在路径列表中搜索资源。搜索结果会缓存 60 秒。可以使用 use_cache=False 禁用此功能。

  3. resource_remove_path(path) − 移除搜索路径。

Kivy - Weak Proxy

Python 使用引用计数算法进行垃圾回收,通过计算有多少个对象正在引用某个特定对象来实现。如果垃圾回收器发现某个对象被另一个对象引用,则无法回收它。如果计数器达到零,则垃圾回收器会释放该对象。

弱引用是一种不能保护对象免于被垃圾回收的引用。为了创建弱引用,Python 提供了名为 weakref 的模块。

Kivy 在 kivy.weakproxy 模块中定义了 WeakProxy 类。为了允许垃圾回收,WeakProxy 类提供了指向对象的弱引用。它有效地通过添加比较支持来增强 weakref.proxy。

Kivy - Context

Kivy 对象 Clock、Cache 和 Builder 是全局对象。要在当前应用程序上下文中使用它们,必须先注册它们。kivy.context 模块定义了一个 Context 类,该类继承了 Python 的内置 dict 类属性。

除了 dict 方法之外,此模块中还定义了以下函数:

  1. get_current_context() − 返回当前上下文。

  2. egister_context(name, cls, *args, **kwargs) − 注册新上下文。