Не совсем мог понять ваш вопрос, но предположим, что в промежутке какого-то времени вы опрашивайте API на получение курса валют, а далее хотите вывести значение курса как надпись на кнопке. В таком случае вам может помочь использование from kivy.clock import Clock
. Мы зададим некоторый промежуток времени, в котором будем опрашивать внутреннюю процедуру класса MyBL
, а затем обновлять текст нашей кнопки.
В качестве функции возвращающая значение курса, я буду использовать модуль Random
и возвращать значения от 1 до 100, в своём примере вы можете проинициализировать собственную функцию, которая будет возвращать курс валют, нам главное понять, как вызвать и присвоить данное значение как текст к кнопке.
Дополним наш класс MyBL
Следующими вещами:
def update_button_text(self, new_text):
#обновляем текст кнопки (используем её при каллбэке нажатия на кнопку 1 (`callback1`)
self.text_btn1 = new_text
def update_random_number(self, dt):
#создаем переменную со случайным числом, но тут вы можете собственно объявить переменную курса валют
#и присваиваем её к тексту кнопки
new_random_number = str(random.randint(1, 100))
self.text_btn1 = new_random_number
Дополним наш callback1
def callback(self):
print("1")
self.update_button_text("New Text") # Изменяем надпись кнопки при нажатии
Далее создадим в классе нашего приложения (MyApp
) хандлер on_start
, толкая в него создадние клока с ивентом обновления текста кнопки случайным числом
def on_start(self):
# Запускаем таймер с интервалом в 1 секунду для обновления текста кнопки
Clock.schedule_interval(self.root.update_random_number, 1)
Не забываем дополнить импорт
from kivy.clock import Clock
Теперь, при нажатии на кнопку, кнопка принимает текст New Text
, а каждую секунду надпись кнопки изменяется на случайное число от 1 до 100.
До нажатия выглядит так (не запишу вам анимацию, уж поверьте или проверьте, там меняются значения каждую секунду)

После нажатия на 1 секунду.

Полный код для вас
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty
from kivy.uix.button import Button
from kivy.clock import Clock
import random
KV = """
MyBL:
orientation: "vertical"
size_hint: (0.95, 0.95)
pos_hint: {"center_x": 0.5, "center_y":0.5}
Label:
font_size: "30sp"
text: root.data_label
Button:
text: root.text_btn1
bold: True
background_color: "#00FFCE"
size_hint: (1,0.5)
on_press: root.callback()
Button:
text: "2"
bold: True
background_color: "#00FFCE"
size_hint: (1,0.5)
on_press: root.callback1()
"""
class MyBL(BoxLayout):
data_label = StringProperty("Главный текст")
text_btn1 = StringProperty("1")
def callback(self):
print("1")
self.update_button_text("New Text") # Изменяем надпись кнопки при нажатии
def callback1(self):
print("2")
def update_button_text(self, new_text):
#обновляем текст кнопки (используем её при каллбэке нажатия на кнопку 1 (`callback1`)
self.text_btn1 = new_text
def update_random_number(self, dt):
#создаем переменную со случайным числом, но тут вы можете собственно объявить переменную курса валют
#и присваиваем её к тексту кнопки
new_random_number = str(random.randint(1, 100))
self.text_btn1 = new_random_number
class MyApp(App):
def build(self):
return Builder.load_string(KV)
def on_start(self):
# Запускаем таймер с интервалом в 1 секунду для обновления текста кнопки
Clock.schedule_interval(self.root.update_random_number, 1)
if __name__ == "__main__":
MyApp().run()