我如何在 kivy 中不断更新我的标签?

角边

我已经被这个问题困了几个小时了。我正在制作一个自制的智能家居终端,并且已经对 kivy 进行了大约 2 周的修补,到目前为止它一直很棒。我现在想在屏幕内显示标签内的温度。我制作了一个带有 4 个按钮的操作栏,单击时可以在屏幕上滑动。在名为“Thermostaat”的第一个屏幕中,我想显示一个标签,其中包含从我编写的另一个外部脚本读取的温度。我似乎无法获得标签内的温度,即使是虚拟值也是如此”这是我的 main.py:

#!/usr/bin/env python3
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.properties import ObjectProperty, StringProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.uix.label import Label
from kivy.lang import Builder

class Menu(BoxLayout):
    manager = ObjectProperty(None)
    def __init__(self,**kwargs):
        super(Menu, self).__init__(**kwargs)
        Clock.schedule_interval(self.getTemp, 1)
    def getTemp(self,dt):
        thetemp = 55 #will be changed to temp.read()
        self.ids.TempLabel.text = str(thetemp)
        print(thetemp)

class ScreenThermo(Screen):
    pass

class ScreenLight(Screen):
    pass

class ScreenEnergy(Screen):
    pass

class ScreenWeather(Screen):
    pass

class Manager(ScreenManager):
    screen_thermo = ObjectProperty(None)
    screen_light = ObjectProperty(None)
    screen_energy = ObjectProperty(None)
    screen_weather = ObjectProperty(None)

class MenuApp(App):
    def thermostaat(self):
        print("Thermostaat")

    def verlichting(self):
        print("Verlichting")

    def energie(self):
        print("Energie")

    def weer(self):
        print("Het Weer")

    def build(self):
        Builder.load_file("test.kv")
        return Menu()


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

这是我的 .kv 文件:

#:kivy 1.10.0
<Menu>:

    manager: screen_manager
    orientation: "vertical"
    ActionBar:
        size_hint_y: 0.05
        ActionView:
            ActionPrevious:
            ActionButton:
                text: "Thermostaat"
                on_press: root.manager.current= 'thermo'
                on_release: app.thermostaat()
            ActionButton:
                text: "Verlichting"
                #I want my screens to switch when clicking on this actionbar button
                on_press: root.manager.current= 'light'
                on_release: app.verlichting()
            ActionButton:
                text: "Energieverbruik"
                on_press: root.manager.current= 'energy'
                on_release: app.energie()
            ActionButton:
                text: "Het Weer"
                on_press: root.manager.current= 'weather'
                on_release: app.weer()
    Manager:
        id: screen_manager

<ScreenThermo>:
    Label:
        #this is where i want my label that shows the temperature my sensor reads
        text: "stuff1"
<ScreenLight>:
    Button:
        text: "stuff2"
<ScreenEnergy>:
    Button:
        text: "stuff3"
<ScreenWeather>:
    Button:
        text: "stuff4"

<Manager>:
    id: screen_manager
    screen_thermo: screen_thermo
    screen_light: screen_light
    screen_energy: screen_energy
    screen_weather: screen_weather

    ScreenThermo:
        id: screen_thermo
        name: 'thermo'
        manager: screen_manager
    ScreenLight:
        id: screen_light
        name: 'light'
        manager: screen_manager
    ScreenEnergy:
        id: screen_energy
        name: 'energy'
        manager: screen_manager
    ScreenWeather:
        id: screen_weather
        name: 'weather'
        manager: screen_manager

我不断收到以下错误:

super(ObservableDict, self).__getattr__(attr))
 AttributeError: 'super' object has no attribute '__getattr__'

这是我的追溯柜面你想知道:

Traceback (most recent call last):
   File "main.py", line 57, in <module>
     MenuApp().run()
   File "/home/default/kivy/kivy/app.py", line 829, in run
     runTouchApp()
   File "/home/default/kivy/kivy/base.py", line 502, in runTouchApp
     EventLoop.window.mainloop()
   File "/home/default/kivy/kivy/core/window/window_pygame.py", line 403, in mainloop
     self._mainloop()
   File "/home/default/kivy/kivy/core/window/window_pygame.py", line 289, in _mainloop
     EventLoop.idle()
   File "/home/default/kivy/kivy/base.py", line 337, in idle
     Clock.tick()
   File "/home/default/kivy/kivy/clock.py", line 581, in tick
     self._process_events()
   File "kivy/_clock.pyx", line 367, in kivy._clock.CyClockBase._process_events
     cpdef _process_events(self):
   File "kivy/_clock.pyx", line 397, in kivy._clock.CyClockBase._process_events
     raise
   File "kivy/_clock.pyx", line 395, in kivy._clock.CyClockBase._process_events
     event.tick(self._last_tick)
   File "kivy/_clock.pyx", line 167, in kivy._clock.ClockEvent.tick
     ret = callback(self._dt)
   File "main.py", line 17, in getTemp
     self.ids.TempLabel.text = str(thetemp)
   File "kivy/properties.pyx", line 839, in kivy.properties.ObservableDict.__getattr__
     super(ObservableDict, self).__getattr__(attr))
 AttributeError: 'super' object has no attribute '__getattr__'

我希望有人愿意帮助我解决这个问题,因为我想继续这个项目,我的 SmartHome 设备的大部分功能已经可以工作了,所以最后一部分是制作一个像样的 GUI 来适应它(控制灯光,控制房子里的温度等......)

服务提供商

您的菜单中没有 id TempLabel

首先,您必须在 kv 中添加 TempLabel:

...
<ScreenThermo>:
    Label:
        id: TempLabel
        text: "stuff1"
...

然后更新正确的标签:

...
class Menu(BoxLayout):
    manager = ObjectProperty(None)
    def __init__(self,**kwargs):
        super(Menu, self).__init__(**kwargs)
        Clock.schedule_interval(self.getTemp, 1)
    def getTemp(self,dt):
        thetemp = 55 #will be changed to temp.read()
        self.manager.screen_thermo.ids.TempLabel.text = str(thetemp)
        print(thetemp)
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Python 中创建一个不断更新的标签

来自分类Dev

如何在Swift中不断更新ULabel的文本

来自分类Dev

如何在javascript中不断更新关系?

来自分类Dev

我如何在kivy程序中使用json api

来自分类Dev

我如何在kivy程序中使用json api

来自分类Dev

如何在Kivy中与标签碰撞

来自分类Dev

我怎样才能让 Swift 不断更新速度

来自分类Dev

如何在 Kivy 中更新 StringProperty 变量

来自分类Dev

javafx中如何将一个不断变化的Long数字绑定到一个标签上,使标签不断更新

来自分类Dev

Kivy:如何在Kivy中显示对象列表?

来自分类Dev

Kivy:如何在单击按钮时更新标签

来自分类Dev

如果表单不断更新,我如何实现自动保存以重置

来自分类Dev

Kivy:如何在课堂外更新布尔

来自分类Dev

为什么我需要不断更新我的Google Auth访问令牌?

来自分类Dev

我需要一个随着我的客户收到新数据而不断更新的 GUI

来自分类Dev

如何在Kivy ScrollView中滚动GridLayout?

来自分类Dev

如何在Kivy中关闭全屏显示?

来自分类Dev

如何在Kivy中制作超链接?

来自分类Dev

如何在Kivy中重置小部件

来自分类Dev

如何在kivy中删除小部件?

来自分类Dev

如何在Kivy中更改颜色

来自分类Dev

如何在Kivy中更改模板值

来自分类Dev

如何在Kivy中制作轮播?

来自分类Dev

如何在Kivy + Python中读取NFC标签?

来自分类Dev

如何在KIVY中删除小部件(标签,按钮等)

来自分类Dev

如何在Kivy中将文本放入标签中?

来自分类Dev

如何在python中不断更新固定长度的列表?

来自分类Dev

如何在kivy中更新函数内部的布局

来自分类Dev

如何为 Kivy 标签中的变量编码?

Related 相关文章

热门标签

归档