Обработка ввода с клавиатуры относительно его источника в Kivy

В настоящее время я немного экспериментирую с Kivy и добавил TextInput в свой графический интерфейс.

Теперь я хочу сохранить такие функции, как удаление последнего символа при нажатии Backspace и т. д., но также хочу, чтобы Kivy выполнял метод, когда в мой textInput вводится новая буква.

Как бы я это сделал? Я попробовал следующий код, который работает с точки зрения вызова указанной функции, но не сохраняет функции возврата и удаления.

Код:

КВ

#: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

питон

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()
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
193
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно вызвать super для 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 в вашем файле kv.

Другие вопросы по теме