【发布时间】:2021-12-31 20:00:47
【问题描述】:
当我尝试在 kivy/kivymd 中更改标签的文本时,出现以下错误:
AttributeError: 'TheApp' object has no attribute 'ids'
这是 main.py 的一部分,用于一个最小的可重现示例:
class TheApp(MDApp):
btstate = 0
def voice_session_connec(self):
if self.btstate == 0:
self.ids.Main_button.text = "Stop"
btstate = 1
th = threading.Thread(target=voice_session)
self.th.start()
else:
self.ids.Main_button.text = "Start"
btstate = 0
self.th.join()
.KV 字符串:
MDFloatLayout:
MDRoundFlatButton:
id: Main_button
text: "Start"
text_color: 0, 1, 0, 1
pos_hint: {"center_x": .5, "center_y": .5}
on_release: app.voice_session_connec()
希望你能解决这个问题,但我不擅长 kivy。
【问题讨论】:
-
您是否定义了
root小部件。尝试将self.ids更改为self.root.ids。Thread'th' 也可能有问题,不应该是self.th。 -
感谢它的工作。提交您的答案,如果您愿意,我会将其标记为正确。
-
成功了,仅此而已。乐于助人。
-
一些建议: 1. 有时您似乎没有对您的类
TheApp的某些属性、方法提供任何引用,它们来自哪里。这不遵循OOP结构,可能会导致一些问题。只要在课堂上应用self.something而不是something,就尝试它。 2.kivy中有一些现成的好用的属性,试试看。例如,将btstate设置为NumericProperty(0)而不仅仅是0。您可以在kivy 文档中找到更多信息。
标签: python kivy kivy-language kivymd