Как я могу обновить то, что отображается в виджете TextInput?питон киви - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть виджет TextInput, который должен отображать текст в файле .log.

Сценарий python выглядит как

logginfo = ObjectProperty()

with open('logtest.log', 'r') as file:
    loginfo = file.read()

Файл kivy выглядит как

TextInput:
    id: logginfo
    text: root.loginfo

Проблема в том, что файл журнала читается только один раз, и это то, что отображается.

Как мне обновить loginfo всякий раз, когда изменяется файл .log?Другими словами, как я могу получить прямую трансляцию файла logtest.log?

1 Ответ

0 голосов
/ 07 февраля 2019

Вам нужно будет создать метод / функцию, которая проверит изменения и загрузит файл, чтобы обновить текстовое поле для вас.Не существует «автоматического» способа сделать это.

Я не работаю с kivy напрямую, но большинство структур GUI, похоже, поставляются с каким-то таймером или объектом тайм-аута.Киви, похоже, ничем не отличается в этом случае.Быстрый поиск показал, что у Киви есть объект «Часы».Я нашел несколько документов здесь .

В большинстве случаев они работают по тайм-ауту, поэтому вы определяете часы, сообщаете им, какую функцию запускать, повторять или нет, и как часто следует превышать время ожидания.Каждый раз, когда время истекает, вызывается функция.Вы можете кодировать функцию, чтобы делать все что угодно, в этом случае проверять файл на наличие изменений.

Я бы предложил создать хеш файла (что-то простое, например, md5) и сохранить хеш в переменной.,Затем, каждый раз, когда время истекает, он может просто сравнить хеш файлов с хешем, который вы сохранили в ram, и если он изменился, вы знаете, что вам нужно обновить текстовое поле с новым содержимым файла.Если это не так, вам не нужно повторно обращаться к файлу в течение другого интервала времени ожидания.

Если у вас есть конкретные вопросы по проблемам, с которыми вы сталкиваетесь, пытаясь проработать проект, задайте новые вопросы с конкретными проблемами,снова показывая ваш код в этот момент.

...