Получить текст из TextInput, определенного в файле .kv из класса - PullRequest
0 голосов
/ 08 марта 2019

У меня есть следующий код в Python:

from kivy.app import App
from kivy.uix.widget import Widget
class UI(Widget):
    pass

class UIApp(App):
    def build(self):
        return UI()

    def process(self):
        text = self.ids.input.text
        print(text)

и в UI.kv:

#:kivy 1.0.9

<UI>:
    title: 'InputDialog'
    auto_dismiss: False
    id: 'test1'

    RelativeLayout:
        orientation: 'vertical'
        pos: self.pos
        size: root.size
        id: 'test2'

        TextInput:
            id: 'input'
            hint_text:'Enter compounds'
            pos_hint: {'center_x': 0.5, 'center_y': 0.705}
            size_hint: 0.95, 0.5

теперь, если я вызываю process (), я получаю ошибку 'UIApp' object has no attribute 'ids'. Хорошо. Теперь я пытаюсь заменить self на UI: AttributeError: 'kivy.properties.DictProperty' object has no attribute 'input'. Попытка обратиться к 'test1' также не помогла, равно как и удаление 'вокруг идентификаторов в файле .kv.

Есть ли способ получить входные данные из поля без создания этого поля программно?

1 Ответ

1 голос
/ 08 марта 2019

Задача

В вашем файле kv вы определили id как строку.

Kivy »Справочные виджеты

Внимание

При назначении значения идентификатору, помните, что значение не является строкой. Кавычек нет: хорошо -> id: значение, плохо -> id: 'значение'

Решение

  1. В вашем файле kv удалите одинарные кавычки из всех id
  2. В вашем скрипте Python замените self.ids.input.text на self.root.ids.input.text, так как ids были определены в корне, class UI()
* 1 028 * Пример * +1029 *

файл кв

#:kivy 1.0.9

<UI>:
    title: 'InputDialog'
    auto_dismiss: False
    id: test1

    RelativeLayout:
        orientation: 'vertical'
        pos: self.pos
        size: root.size
        id: test2

        TextInput:
            id: input
            hint_text:'Enter compounds'
            pos_hint: {'center_x': 0.5, 'center_y': 0.705}
            size_hint: 0.95, 0.5
            on_text: app.process()

main.py

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder


Builder.load_file('main.kv')


class UI(Widget):
    pass


class UIApp(App):
    def build(self):
        return UI()

    def process(self):
        text = self.root.ids.input.text
        print(text)


if __name__ == "__main__":
    UIApp().run()

выход

Accesing textinput in kv file using ids

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...