在Kivy中处理有关其来源的键盘输入

时间:2019-05-29 13:51:20

标签: python user-interface kivy

我目前正在尝试使用Kivy,并将TextInput添加到我的GUI中。

我现在想保留诸如在按退格键时删除最后一个字符之类的功能,而且还希望Kivy在向我的textInput输入新字母时执行一种方法。

我该怎么做?我尝试了下面的代码,这些代码在调用上述函数时有效,但是不保留退格键和删除功能。

代码:

KV

#:kivy 1.9.0
<PageLayout>:
    GridLayout:

        searchterm: searchterm

        cols: 2
        rows: 2
        spacing: 5
        padding: 5

        Button:
            text: "maybe a listview of latest traces here"
            size_hint: .2,.5

        BoxLayout:
            orientation:'vertical'

            TextInput:
                id: searchterm
                multiLine: False
                hint_text: "Search for specific processes here"
                keyboard_on_key_down: root.on_search
        Button:
            text: "room for imagination"
            size_hint: 0.2, .5

        Button:
            text: "out of ideas"

    BoxLayout:
        orientation: "vertical"
        Button:
            text: "this is a new page for additional information"

        Label:
            halign: 'center'
            valign: 'center'
            size_hint: None, .025
            width: self.parent.width
            text: "About:"
            color: 0,0,0,1 #textcolor
            canvas.before:
                Color:
                    rgba: 0.5,0.5,0.5,1
                Rectangle:
                    pos: self.pos
                    size: self.size

        Label:
            halign: 'center'
            valign: 'center'
            size_hint: None, .025
            width: self.parent.width
            text: "This tool was written by me"
            color: 0,0,0,1 #textcolor
            canvas.before:
                Color:
                    rgba: 0.5,0.5,0.5,1
                Rectangle:
                    pos: self.pos
                    size: self.size

        Label:
            halign: 'center'
            valign: 'center'
            size_hint: None, .025
            width: self.parent.width
            text: "It is only meant for evaluation and testing purposes."
            color: 0,0,0,1 #textcolor
            canvas.before:
                Color:
                    rgba: 0.5,0.5,0.5,1
                Rectangle:
                    pos: self.pos
                    size: self.size

Python

import kivy

from kivy.app import App
from kivy.uix.pagelayout import PageLayout
from kivy.config import Config
from kivy.properties import ObjectProperty
from kivy.uix.widget import Widget

#WINDOW ATTRIBUTES
Config.set('graphics','resizable','1')
Config.set('graphics','width','1000')
Config.set('graphics','height','800')

class Visualizer(PageLayout):
    searchterm = ObjectProperty(None)
    def on_search(self,*args,**kwargs):
        print("Test")
        print(*args)
        print(**kwargs)

class VisualizerApp(App):


    def build(self):
        self.title = "MQTT IDS Visualizer. Author: Daniel"
        return Visualizer()



GLAPP = VisualizerApp()
GLAPP.run()

1 个答案:

答案 0 :(得分:1)

您需要呼叫super的{​​{1}}。我认为最简单的方法是像这样定义keyboard_on_key_down的子类:

TextInput

然后将class MyTextInput(TextInput): def keyboard_on_key_down(self, window, keycode, text, modifiers): App.get_running_app().root.on_search( window, keycode, text, modifiers) # calls your `on_search()` method return super(MyTextInput, self).keyboard_on_key_down(window, keycode, text, modifiers) 文件中的TextInput替换为MyTextInput