Не установить фокус, когда возвращаются менеджер экрана с кивом и питоном - PullRequest
1 голос
/ 28 мая 2019

Я хочу установить фокус ввода текста. в начале фокус установлен правильно, но когда я перехожу к следующему экрану и возвращаюсь к начальному экрану, фокус не устанавливается правильно.

Это приложение с лектором RFID, я хочу прочитать код и выбрать ввод или выход

main.py


import kivy
kivy.require('1.10.0') # replace with your current kivy version !


from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder

class MyScreenManager(ScreenManager):
    def __init__(self,**kwargs):
        super(MyScreenManager,self).__init__()


class Menu1(Screen):
    def __init__(self, **kwargs):
        super(Menu1, self).__init__()


class Menu2(Screen):
    def __init__(self, **kwargs):
        super(Menu2, self).__init__()


Builder.load_file("main.kv")


class Fichaje(App):
    def build(self):
        return MyScreenManager()


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

main.kv


#:kivy 1.10.0
#:import WipeTransition kivy.uix.screenmanager.WipeTransition

<MyScreenManager>:  
    #transition: WipeTransition()
    Menu1:
        id: menu1       
    Menu2:
        id: menu2


<Menu1>:
    name: "screen1"
    BoxLayout:
        orientation: 'vertical'
        TextInput:
            id: input1
            size_hint_y: .1
            multiline: False
            focus: True
            on_text_validate:                
                root.manager.current = "screen2"

        BoxLayout:  


<Menu2>:
    name: "screen2"
    BoxLayout:
        Button:
            text:"Entrada"          
            on_press:          
                root.manager.current = "screen1"

        Button:
            text:"Salida"
            on_press:       
                root.manager.current = "screen1"

Нет сообщений об ошибках, но фокус находится не на нужном сайте, Спасибо

Я изменяю код для упрощения ошибки

1 Ответ

0 голосов
/ 29 мая 2019

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

Самый быстрый способ - добавить только одну строку кода в файл kv и изменить on_press на on_release.

root.manager.get_screen("screen1").ids["input1"].focus

Эта строка может отличаться при использовании, например, свойства объекта на экране screen1.Или, если вы не можете использовать метод on_release, возможно, используйте часы, чтобы запланировать фокусировку на некоторое время, а если касание все еще не работает, перенесите его.
Но вот быстрое решение.

<Menu2>:
    name: "screen2"
    BoxLayout:
        Button:
            text:"Entrada"
            on_release:
                root.manager.current = "screen1"
                root.manager.get_screen("screen1").ids["input1"].focus = True
...