如何从另一个 class 更新一个 kivy 标签
How to update a kivy label from another class
import kivy
from kivy.app import App
from kivy.clock import Clock
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
class MyGrid(GridLayout):
def __init__(self, **kwargs):
super(MyGrid, self).__init__(**kwargs)
self.rows = 2
self.accel = Label(text = "unknown")
self.orein = Label(text = "unknown")
self.add_widget(self.accel)
self.add_widget(self.orein)
class MyApp(App):
def build(self):
return MyGrid()
Clock.schedule_interval(self.update, 1)
def update(self, dt):
ac = "dfskjjlfh"
ore = "kjdsfkjdf"
App.accel.text = ac
App.orein.text = ore
MyApp().run()
我无法找到如何从另一个 class 更新标签的答案。我不断收到以下错误:
The following code is unreachable
两个小部件都卡在未知字符串中,但不会更改为函数更新中的变量。
我不知道你提到的错误:
The following code is unreachable
可能是您使用的 IDLE 导致了错误(因为您发布的代码永远不会抛出此类错误)。
但是,您的代码确实存在一些问题。
首先,在方法 build
中,您做到了,
def build(self):
return MyGrid()
Clock.schedule_interval(self.update, 1)
由于您return
先安排回调,您的回调函数将永远不会被执行。所以你需要调换他们的顺序。
其次,在方法 update
中你做了 App.accel.text
。这将引发 AttributeError
,因为 App
class 没有这样的 属性 accel
。此外,它甚至不存在于 App
class 的实例中(即在 MyApp
中)。您通常不需要直接引用 App
class,而是它的实例(除了某些方法,如 get_running_app
等)
您似乎想访问 MyApp
中 MyGrid
的 属性,在方法 build
中创建该 class 的实例,从而您将能够访问您在 class 中定义的任何属性。因此,您修改后的 MyApp
现在应该看起来像
class MyApp(App):
def build(self):
self.grid = MyGrid() # Creating an instance.
Clock.schedule_interval(self.update, 1.)
return self.grid
def update(self, dt):
ac = "dfskjjlfh"
ore = "kjdsfkjdf"
# Now access that instance and its properties.
self.grid.accel.text = ac
self.grid.orein.text = ore
import kivy
from kivy.app import App
from kivy.clock import Clock
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
class MyGrid(GridLayout):
def __init__(self, **kwargs):
super(MyGrid, self).__init__(**kwargs)
self.rows = 2
self.accel = Label(text = "unknown")
self.orein = Label(text = "unknown")
self.add_widget(self.accel)
self.add_widget(self.orein)
class MyApp(App):
def build(self):
return MyGrid()
Clock.schedule_interval(self.update, 1)
def update(self, dt):
ac = "dfskjjlfh"
ore = "kjdsfkjdf"
App.accel.text = ac
App.orein.text = ore
MyApp().run()
我无法找到如何从另一个 class 更新标签的答案。我不断收到以下错误:
The following code is unreachable
两个小部件都卡在未知字符串中,但不会更改为函数更新中的变量。
我不知道你提到的错误:
The following code is unreachable
可能是您使用的 IDLE 导致了错误(因为您发布的代码永远不会抛出此类错误)。
但是,您的代码确实存在一些问题。
首先,在方法 build
中,您做到了,
def build(self):
return MyGrid()
Clock.schedule_interval(self.update, 1)
由于您return
先安排回调,您的回调函数将永远不会被执行。所以你需要调换他们的顺序。
其次,在方法 update
中你做了 App.accel.text
。这将引发 AttributeError
,因为 App
class 没有这样的 属性 accel
。此外,它甚至不存在于 App
class 的实例中(即在 MyApp
中)。您通常不需要直接引用 App
class,而是它的实例(除了某些方法,如 get_running_app
等)
您似乎想访问 MyApp
中 MyGrid
的 属性,在方法 build
中创建该 class 的实例,从而您将能够访问您在 class 中定义的任何属性。因此,您修改后的 MyApp
现在应该看起来像
class MyApp(App):
def build(self):
self.grid = MyGrid() # Creating an instance.
Clock.schedule_interval(self.update, 1.)
return self.grid
def update(self, dt):
ac = "dfskjjlfh"
ore = "kjdsfkjdf"
# Now access that instance and its properties.
self.grid.accel.text = ac
self.grid.orein.text = ore