Обновление отображаемой переменной каждую секунду с помощью Clock.schedule_interval - PullRequest
2 голосов
/ 27 апреля 2019

У меня schedule_interval, вызывающий функцию, которая извлекает данные о погоде из Интернета, а затем анализирует их в диктовку.У меня есть чтение файла kv, который диктует и отображает значения в плавающем слое.Я знаю, что эта функция вызывается, потому что она выводится на консоль, но она не обновляется в окне всплывающих окон.Я думал, что значения будут автоматически обновляться из того, что я прочитал.

GUI.py
class weather(FloatLayout):
    def w(self):
        a = parse()
        print(a)
        return a

class weatherApp(App):
    def build(self):
        d = weather()
        Clock.schedule_interval(d.w, 1)
        return d

weather.kv
<Layout>:
     DragLabel:
        font_size: 600
        size_hint: 0.1, 0.1
        pos: 415,455
        text: str(root.w()['temp0'])

Это только одна из меток.Я очень новичок в Kivy, поэтому, если вам, опытным Kivy, это кажется ужасным, прошу прощения.

Печать (a) часть def w (self): работает каждую секунду, но в окне не отображаетсяновые переменные.

test.py

from kivy.app import App
from kivy.clock import Clock
from kivy.uix.floatlayout import FloatLayout

a = {}
a['num'] = 0

class test(FloatLayout):
    def w(self):
        a['num'] += 1
        print(a['num'])
        return a

class testApp(App):
    def build(self):
        d = test()
        Clock.schedule_interval(test.w, 1)
        return d

if __name__ == '__main__':
    p = testApp()
    p.run()


test.kv

#:kivy 1.10.1

<Layout>:
    Label:
        font_size: 200
        size_hint: 0.1, 0.1
        pos: 415,455
        text: str(root.w()['num'])

1 Ответ

0 голосов
/ 27 апреля 2019

Кажется, у вас есть несколько заблуждений:

  • Если вы вызываете функцию в python, это не означает, что будет вызван .kv.Поэтому, если вы вызываете метод w с помощью Clock.schedule_interval (), это не означает, что вычисленное значение обновляет значение текста метки.

  • Когда вы вызываете функцию с Clock.schedule_intervalВы должны использовать объект, а не класс.в вашем случае test - это класс, а вместо этого d - объект.

Когда вы вызываете функцию с помощью Clock.schedule_interval, вы должны использовать объект, а не класс.в вашем случае test - это класс, а вместо этого d - объект.

*. py

from kivy.app import App
from kivy.clock import Clock
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import DictProperty


class test(FloatLayout):
    a = DictProperty({"num": 0})

    def w(self, dt):
        self.a["num"] += 1
        print(self.a["num"])


class testApp(App):
    def build(self):
        d = test()
        Clock.schedule_interval(d.w, 1)
        return d


if __name__ == "__main__":
    p = testApp()
    p.run()

*. kv

#:kivy 1.10.1

<Layout>:
    Label:
        font_size: 200
        size_hint: 0.1, 0.1
        pos: 415,455
        text: str(root.a["num"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...