【问题标题】:Kivy touch and keyboard events passing through to desktopKivy 触摸和键盘事件传递到桌面
【发布时间】:2016-05-25 17:21:33
【问题描述】:

我正在使用Kivy 框架在 Python 3 中开发 UI 应用程序。Kivy 应用程序是全屏的。每当我使用物理键盘执行触摸事件或键入时,底层桌面环境将接收触摸和键盘事件以及我的 Kivy 应用程序。

例如,如果我在桌面上打开一个文本文件,然后运行我的 Kivy 应用程序,我可以在 Kivy 应用程序处于前台(全屏)时盲目地在文本文件中键入文本。 Kivy 应用程序会忽略物理键盘输入,因为我在配置文件中将keyboard_mode 选项设置为dock

触摸事件在我的 Kivy 应用程序中正常工作,我可以选择执行其指定操作的按钮;但是,触摸事件也将传递到桌面。我通过在我的 Kivy 应用程序中盲目双击然后返回桌面以找到大量打开的应用程序(通过我桌面上的快捷方式)来意识到这一点。 Raspberry Pi 社区的成员也遇到了这个问题,但无济于事:https://www.raspberrypi.org/forums/viewtopic.php?f=32&t=132054

这是我的简单 ma​​in.kv 文件供参考:

<Controller>:
    ActionBar:
        pos_hint: {'top':1}
        ActionView:
            use_separator: True
            ActionPrevious:
                title: 'Action Bar'
                with_previous: False
                on_release: root.action_close()

    BoxLayout:
        Label:
            text: "Test"

还有我的 ma​​in.python 文件:

import kivy
from kivy.uix.floatlayout import FloatLayout
from kivy.app import App

class Controller(FloatLayout):

    def action_close(self):
        App.get_running_app().stop()

class ControllerApp(App):

    def build(self):
        self.load_kv('main.kv')
        return Controller()

ControllerApp().run()

以及来自我的 Kivy config.ini 文件中的相关 sn-ps:

[kivy]
keyboard_repeat_delay = 300
keyboard_repeat_rate = 30
log_dir = logs
log_enable = 1
log_level = info
log_name = kivy_%y-%m-%d_%_.txt
window_icon = 
keyboard_mode = dock
keyboard_layout = qwerty
desktop = 1
exit_on_escape = 1
pause_on_minimize = 0
config_version = 14

[graphics]
display = -1
fullscreen = auto
height = 600
left = 0
maxfps = 60
multisamples = 2
position = auto
rotation = 0
show_cursor = 1
top = 0
width = 800
resizable = 1
borderless = 0
window_state = visible
minimum_width = 0
minimum_height = 0

[input]
mouse = mouse
mtdev_%(name)s = probesysfs,provider=mtdev
hid_%(name)s = probesysfs,provider=hidinput

...

我尝试使用配置文件中的值,尤其是window_statefullscreenkeyboard_mode 选项,但没有成功。 Kivy 配置信息可以在here 找到。谷歌上的各种搜索,这里什么都没有,任何帮助将不胜感激。

【问题讨论】:

    标签: python kivy raspbian kivy-language


    【解决方案1】:

    我认为这是由使用 Kivy 的 rpi 特定窗口提供程序引起的,它使用与硬件的低级接口以更有效地执行,但反过来又不以正常方式与桌面交互 - 具体来说,输入和绘图绕过正常机制。

    如果您想在桌面上使用该应用程序,我认为您可以通过针对它们重新编译 Kivy 来使用普通的窗口后端(理想情况下是 SDL2),尽管这可能会运行得更慢。但是,如果您实际上不需要桌面(例如,如果 Kivy 将是唯一需要运行的东西),则此窗口提供程序的另一个优点是它实际上不需要 X11 等,在这种情况下您可以不需要启动它们以避免问题。

    另请参阅github issue 关于该主题。

    【讨论】:

    • 感谢您的意见。如果我启动到 CLI,它肯定会消除触摸问题,但是我仍然使用控制台。如果用户只是插入键盘,他/她可能能够在应用程序“后面”运行命令。你知道解决办法吗?
    • 哦,好点。我不确定这一点,但我没有尝试过 rpi,我认为其他 Kivy 用户已经遇到并解决了这个问题。无论如何,这样的输入是否可能,因为 cli 正在运行 hte kivy 应用程序,因此通常不会接受命令(尽管后台可能有效)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    相关资源
    最近更新 更多