如何在Kivy中使用键盘用于不同的布局?

时间:2014-08-07 08:04:39

标签: python keyboard kivy python-3.4

我有主要的布局和一些弹出窗口,我希望键在主要布局聚焦时做一些功能,一些弹出窗口打开时另一个功能,另一个用于另一个弹出窗口等等。我怎么能以最好的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

我做过类似的事情,但是我没有使用弹出窗口。我的应用程序有一个带有许多屏幕的ScreenManager,每个屏幕都有子菜单,每个屏幕的每个子菜单都需要它自己的键映射。

为了更好地处理这些键映射集的切换,我创建了一个KeyboardManager类和一个KeyboardLayout类:

KeyboardManager类具有您给Window的keyboard_handler()函数。 KeyboardLayout类将包含所有绑定的字典,即{'a':a_key_callback,'esc':esc_key_callback}

我的应用程序中的每个子菜单都有一个KeyboardLayout实例,在其中我将我的键映射定义到它的字典中。启动子菜单时,我会将KeyboardLayout附加到KeyboardManager(在KeyboardManager中保存对KeyboardLayout的引用)。然后,KeyboardManager.keyboard_handler方法拦截键事件,在当前连接的KeyboardLayout中查找要调用的函数,然后调用该函数。在keyboard_handler中,您可以决定在不存在键映射时该怎么做。

在您的情况下,您需要一个KeyboardLayout用于主布局,一个用于弹出窗口。打开弹出窗口时,将它的KeyboardLayout附加到KeyboardManager,当您离开弹出窗口时,将主布局的KeyboardLayout附加回KeyboardManager。

这是我应用的方法,它对我来说非常有效。这些课程设置完成后很容易管理。