根据 Shamim Ahmad 对 OPost 的评论请求:
请参阅从 python 更改 kivy 属性的示例。
您可以看到第三个标签的所有属性都是从 python 端设置的。
在此示例中,我尝试混合多个属性以说明如何从 python 端与 UI 进行交互。您可以将此示例扩展为其他 Kivy 属性。
main.py
from datetime import datetime
import random
from kivy.app import App
from kivy.clock import Clock, mainthread
from kivy.graphics import Rectangle, Color
from kivy.properties import (
ListProperty,
ObjectProperty,
StringProperty,
)
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.config import Config
Config.set('graphics', 'position', 'custom')
Config.set('graphics', 'left', 0)
Config.set('graphics', 'top', 0)
Builder.load_file('main.kv')
class MainLayout (BoxLayout):
label1_text = StringProperty('Initial Text')
label2_text = StringProperty()
label2_color = ListProperty([1, .5, 0, 1])
my_object_label = ObjectProperty()
def __init__(self, **kwargs):
super(MainLayout, self).__init__(**kwargs)
Clock.schedule_interval(self.update_my_lbls, 5)
self.refference_time = datetime.now()
self.label1_text = datetime.now().strftime('%H:%M:%S')
self.my_object_label.markup = True
self.my_object_label.text = '[b]Object Label[/b]'
self.my_object_label.color = self.random_color()
self.my_object_label.font_size = '30sp'
@mainthread
def update_my_lbls(self, dt):
self.label1_text = datetime.now().strftime('%H:%M:%S')
time_delta = (datetime.now() - self.refference_time).seconds
if (time_delta % 2 == 0):
self.label2_color = [0, 1, .2, 1]
self.label2_text = f'[b]{str(time_delta)} even [/b]'
else:
self.label2_color = [.2, .5, 1, 1]
self.label2_text = f'[b]{str(time_delta)} odd[/b]'
self.my_object_label.color = self.random_color()
def random_color(self):
r, g, b, a = [random.uniform(0, 1) for _ in range(4)]
return ([r, g, b, a])
class MyApp (App):
def build(self):
return MainLayout()
if __name__ == '__main__':
MyApp().run()
main.kv
<MainLayout>:
my_object_label: my_object_label
orientation: 'vertical'
padding: 10
canvas.before:
Color:
rgba: (.1, .1, .1, 1)
Rectangle:
pos: self.pos
size: self.size
Label:
font_size: '30sp'
text: root.label1_text
color: (0, .5, .8, 1)
Label:
font_size: '30sp'
markup: True
text: '[b]Time Delta[/b]'
color: root.label2_color
Label:
id: my_object_label