如何解决不能让 ids 在 Python 中工作! Kivy 新手需要帮助
我知道你会认为我是一个绝对的新手——你是对的!!也许你们中的一些人会很友好地帮助我 :)
我正在制作一个带有屏幕的小型家用设备,用于控制和运行灯(Phillips Hue),显示天气等等。
我制作了一个运行灯的脚本,效果很好。我现在也在尝试构建一个界面。当脚本在后台运行时,界面应该在运行时更新按钮状态。
我正在尝试创建一个函数,该函数将使用 Kivy 中的时钟函数定期更新灯光。 A 尝试过使用属性,我也尝试过使用 id,但无论我尝试什么都会出错。我看到人们经常在引用 Kivy 小部件时遇到问题,而且错误似乎有些不同,需要比我对 Kivy 构建和运行方式有更多的了解。
所以也许你们中的一些专业人士可以帮助指出我做错的事情!我已经包含了 kv 文件的受影响部分以及显示我的应用程序结构的伪代码。
KV 文件:
<FrontPage>:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'tapet2.jpg'
GridLayout:
rows: 3
cols: 1
size: root.width * 1,root.height * 1
GridLayout:
rows: 1
cols: 2
Label:
size_hint_x: 0.35
text: "VH54 appen"
font_size: 30
Label:
text: ""
GridLayout:
rows: 1
cols: 5
padding: 20
spacing: 20
size_hint_y: 3
ToggleButton:
id: alrum_knap
text: 'Alrum'
on_state: root.alrum_knap(self.state)
...(继续使用其他布局内容)
Python 代码:
from kivy.app import App,Widget
from kivy.clock import Clock
from kivy.core.window import Window
class FrontPage(Widget):
def update_alrum_knap(self):
( ... Code that defines alrum_on True or False)
if alrum_on == True:
FrontPage().ids.alrum_knap.state = 'down'
else:
FrontPage().ids.alrum_knap.state = 'normal'
def alrum_knap(self,state):
if state == 'down':
Hue.ongroup(alrum_gr,sc_dag_alrum,10)
else:
Hue.offgroup(alrum_gr,20)
def loop(self):
(Contains code for running the lights)
class Vh54App(App):
def build(self):
Clock.schedule_interval(FrontPage.loop,0.5)
Clock.schedule_interval(FrontPage.update_alrum_knap,0.5)
return FrontPage()
if __name__ == '__main__':
Vh54App().run()
非常感谢您提供的所有帮助和见解。我非常清楚我犯了各种各样的新手错误!我在生活中的其他方面做得更好,但这也很有趣:D
问候 西蒙,丹麦
解决方法
在您的代码中:
FrontPage().ids.alrum_knap.state = 'down'
FrontPage()
正在创建 FrontPage
的新实例,该实例不是出现在您的 GUI 中的实例。每当您使用类名(如 FrontPage
)后跟 ()
时,您都是在创建该类的新实例。
由于该代码位于 FrontPage
类的方法中,您可以简单地使用 self
参数,如下所示:
self.ids.alrum_knap.state = 'down'
此外,您在 FrontPage.loop
方法中使用 FrontPage.update_alrum_knap
和 build()
是不正确的。您应该再次使用 FrontPage
的实例,如下所示:
def build(self):
fp = FrontPage()
Clock.schedule_interval(fp.loop,0.5)
Clock.schedule_interval(fp.update_alrum_knap,0.5)
return fp
您还需要向 dt
调用的方法添加 Clock
参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。