Отображение переменных в приложении Kivy с использованием Builder.load_string

Как мне отображать dikt['r_pi'] на самом Builder.load_string и обновлять его каждый раз, когда я нажимаю кнопку обновления?

from kivy.core.window import Window
Window.fullscreen = 0
Window.size = (1000, 500)

from kivy.app import App
from kivy.lang import Builder
import json
import requests
from kivy.properties import ObjectProperty


class MyApp(App):

    url = 'https://podluck-b3df6.firebaseio.com/.json'
    auth_key = '2BKTZfCSuILkpIRKzDAIWOMkhaC5jIq069Eg4oLS'

    def get(self):
        request = requests.get(self.url + '?auth=' + self.auth_key)
        dikt = request.json() #yes it IS a dict i checked
        self.btn.text = "The pod is" + str(dikt['r_pi'])
        print(dikt['r_pi'])

    def build(self):
        return KV

KV = Builder.load_string ("""

ScreenManager:
    id: manager
    Screen:
        BoxLayout:
            orientation: 'vertical'
            GridLayout:
                cols:1
                Button:
                    id: btn
            GridLayout:
                cols:1
                Button:
                    text: 'Update'
                    on_release: app.get()

""")

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

Я ожидаю, что на экране отобразится «не занято», что является значением ключа «r_pi» в моей базе данных firebase, но вместо этого я получаю следующее:

Объект «MyApp» не имеет атрибута «btn»

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
270
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Идентификатор относится к дереву, которое принадлежит, то есть вы должны сначала получить ScreenManager, и в этом случае это корень, поэтому решение:

def get(self):
    request = requests.get(self.url + '?auth=' + self.auth_key)
    dikt = request.json() #yes it IS a dict i checked
    self.root.ids.btn.text = "The pod is" + str(dikt['r_pi'])

Огромное спасибо! Не ожидал, что это будет однострочное редактирование!

Stephen Alvin 09.04.2019 23:44

Другие вопросы по теме