Kivy Выбор на фокусе - PullRequest
       4

Kivy Выбор на фокусе

2 голосов
/ 02 апреля 2020

Я пытаюсь, чтобы kivy выделил текст виджета TextInput в фокусе, но когда я пытаюсь, кажется, что он выделяется, когда он не фокусируется и сохраняет выделение. Любые идеи, как я могу выбрать его на фокус и отменить выделение? Я приложил свой код ниже, если кто-то хочет поиграть.

файл кв:

<TextInput>:
    size_hint: 0.9, 0.5
    pos_hint: {'center_x': 0.5, 'center_y': 0.5}
    multiline: False

<Button>:
    text: "Press Me"
    size_hint: (0.1, 0.5)
    pos_hint: {'center_x': 0.5, 'center_y': 0.5}

<MainLayout>:
    canvas.before:
        Color:
            rgba: 0.15, 0.15, 0.16, 1
        Rectangle:
            pos: self.pos
            size: self.size

    BoxLayout:
        orientation: 'vertical'
        padding: 10

        BoxLayout:
            padding: 10
            TextInput:
                text: "Directory"
            Button:
                text: "Browse"
                on_press: root.browse_btn()

        BoxLayout:
            padding: 10
            TextInput:
                text: "Prefix"
                on_focus: self.select_all()
            TextInput:
                text: "File"
                on_focus: self.select_all()
            TextInput:
                text: "Suffix"
                on_focus: self.select_all()

        BoxLayout:
            padding: 10
            Button:
                id: button_one
                text: "Confirm"
                on_press: root.confirm_btn()
            Button:
                text: "Cancel"
                on_press: root.cancel_btn()

python файл:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.core.window import Window
from kivy.config import Config

Config.set('graphics', 'resizable', 0)


class MainLayout(BoxLayout):
    button_id = ObjectProperty(None)

    def browse_btn(self):
        print("Hey")

    def confirm_btn(self):
        print("Confirm")

    def cancel_btn(self):
        print("Cancel")


class BatchRenameApp(App):
    def build(self):
        self.title = "Batch File Rename"
        Window.size = (750, 250)
        return MainLayout()


if __name__ == '__main__':
    app = BatchRenameApp()
    app.run()

1 Ответ

0 голосов
/ 02 апреля 2020

Хорошо спрятано в документации TextInput:

Выбор отменяется, когда фокус TextInput сфокусирован. Если вам нужно показать выделение, когда TextInput сфокусирован, вам следует отложить (использовать Clock.schedule) вызов функций для выбора текста (select_all, select_text).

Итак, в вашем kv , начните с импорта Clock:

#: import Clock kivy.clock.Clock

Затем вы можете использовать его в TextInput правиле:

        TextInput:
            text: "Prefix"
            on_focus: Clock.schedule_once(lambda dt: self.select_all()) if self.focus else None

if self.focus гарантирует, что select_all только произойдет когда TextInput получает фокус.

...