【发布时间】:2021-02-16 16:27:58
【问题描述】:
我想实现以下内容:
使用add_widget() 函数在 python 中创建一个 Kivy 标签。但是,我想受益于标签在文本变量更改时自动更新的事实(在我的情况下为self.gui_data.number)。我知道在 .kv 文件中添加标签时可以实现这一点,但是在我的情况下这是不可能的,因为我需要在运行时构建部分 GUI。
下面是一个最小示例的代码。有一个按钮add label 添加标签,目标是如果按下decrement 按钮,标签就会改变。不幸的是,事实并非如此。
感谢任何帮助。谢谢!
main.py
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.widget import Widget
import parameters
from kivy.properties import StringProperty
from kivy.event import EventDispatcher
class PongBall(Widget):
gui_data = parameters.Data()
def add_label(self):
self.gui_data.number = self.gui_data.number + '5'
label = Label(text=str(self.gui_data.number))
self.ids.board.add_widget(label)
def decrement(self):
self.gui_data.number = self.gui_data.number + '6'
def reset_parameters(self):
self.gui_data.reset()
class PongApp(App):
def build(self):
game = PongBall()
return game
if __name__ == '__main__':
PongApp().run()
parameters.py
from kivy.properties import StringProperty
from kivy.event import EventDispatcher
class Data(EventDispatcher):
number = StringProperty("0")
def reset(self):
self.number = "0"
pong.kv
<PongBall>:
BoxLayout:
orientation: "vertical"
id: board
Button:
text: "Add label"
on_press: root.add_label()
Button:
text: "Decrement"
on_press: root.decrement()
Button:
text: "Reset parameters"
on_press: root.reset_parameters()
【问题讨论】:
标签: python kivy kivy-language