我正在阅读马克·瓦西尔科夫(Mark Vasilkov)写的《基维蓝图》。在第一章中,作者介绍了属性的概念,并指出这些属性使代码更简洁。
没有属性:我从以下main.py开始
# Source: Chapter 1 of Kivy Blueprints
# File: main.py
from time import strftime
from kivy.app import App
from kivy.clock import Clock
class ClockApp(App):
def update_time(self, _):
self.root.ids.time.text = strftime("[b]%H[/b]:%M:%S")
def on_start(self):
Clock.schedule_interval(self.update_time, 1)
if __name__ == "__main__":
ClockApp().run()
和clock.kv
# File: clock.kv
BoxLayout:
orientation: "vertical"
Label:
id: time
text: "[b]00[/b]:00:00"
font_name: "Roboto"
font_size: 60
markup: True
我认为代码清晰易懂。
具有属性:使用ObjectProperties(对我来说还不是很清楚),main.py由
给出# Source: Chapter 1 of Kivy Blueprintsa
# File: main.py
from time import strftime
from kivy.app import App
from kivy.clock import Clock
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
class ClockLayout(BoxLayout):
time_prop = ObjectProperty(None)
class ClockApp(App):
def update_time(self, _):
self.root.time_prop.text = strftime("[b]%H[/b]:%M:%S")
def on_start(self):
Clock.schedule_interval(self.update_time, 1)
if __name__ == "__main__":
ClockApp().run()
和Clock.kv
# File: clock.kv
BoxLayout:
orientation: "vertical"
time_prop: time
ClockLayout:
Label:
id: time
text: "[b]00[/b]:00:00"
font_name: "Roboto"
font_size: 60
markup: True
我没有看到这种对时钟应用程序进行编码的直接优势。我认为这样做并不明显。作者声称,这种编码方式遵循DRY(请勿重复)原则,我也没有看到。如果有人能启发我,为什么此过程比以前使用id更好,我会很高兴。