Python / Kivy: фокус не устанавливается при использовании мыши - PullRequest
0 голосов
/ 25 августа 2018

Я использую python-2.7 и kivy.
Если я нажимаю кнопку ok, используя mouse, то вызов функции on_press : root.abc().

def abc(self):
    if self.test1.text.strip() == "":
        self.test1.focus = True
        return False

В этой функции я проверяю, является ли test1 textInput пустым, а курсор фокусируется на пустом TextInput.

self.test1.focus = True

Но он не фокусируется на TextInput, когда я вызываю эту функцию с помощью мыши. Кто-то помог мне, как установить фокус на TextInput, когда я нажимаю на кнопку ok, используя mouse?

test.py

from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.core.window import Window
from kivy.properties import ObjectProperty

Window.clearcolor = (0.5, 0.5, 0.5, 1)
Window.size = (300, 100)


class User(Screen):
    test3 = ObjectProperty(None)

    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        Window.bind(on_key_down=self._on_keyboard_down)

    def _on_keyboard_down(self, instance, keyboard, keycode, text, modifiers):
        if self.test3.focus and keycode == 40:  # 40 - Enter key pressed
            self.test3.focus = False
            self.abc()
            return True

    def abc(self):
        if self.test1.text.strip() == "":
            self.test1.focus = True
            return False


class Test(App):

    def build(self):
        return self.root


if __name__ == '__main__':
    Test().run()

test.kv

#:kivy 1.10.0

User:
    test1 : test1
    test3: test3
    BoxLayout:
        orientation: "vertical"

        TextInput:
            id:test1
            focus : True
            text: ' '
            width: 100
            multiline: False
            on_text_validate: test2.focus = True

        TextInput:
            id:test2
            text: ' '
            width: 100
            multiline: False
            on_text_validate:
                test3.background_normal = ''
                test3.background_color = [0, 0, 1, 0.5]    # 50% translucent blue
                test3.focus = True

        Button:
            id:test3
            text: 'Ok'
            focus: False
            on_press : root.abc()

1 Ответ

0 голосов
/ 25 августа 2018

Вы должны использовать on_release, так как on_press вызывается, как только нажимается кнопка, через мгновение мышь восстанавливает фокус, так как нажимает кнопку, с другой стороны, когда она закончена, никто не нажимает будет требовать фокус.

Button:
    id:test3
    text: 'Ok'
    focus: False
    on_release : root.abc()
...