【发布时间】:2016-01-17 08:06:32
【问题描述】:
我试图通过用纯 Python 编写等价物来理解 kv lang。我将 kivy lang 直接翻译成 Python 的尝试惨遭失败。这些程序的外观和行为完全不同!
这是使用 kv lang 的代码:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.properties import StringProperty
import random
Builder.load_string( '''
<YourWidget>:
BoxLayout:
size: root.size
Button:
text: "Change text"
on_release: root.change_text()
Label:
text: root.random_number
''')
class YourWidget(Widget):
random_number = StringProperty()
def __init__(self, **kwargs):
super(YourWidget, self).__init__(**kwargs)
self.random_number = str(random.randint(1, 100))
def change_text(self):
self.random_number = str(random.randint(1, 100))
class YourApp(App):
def build(self):
return YourWidget()
if __name__ == '__main__':
YourApp().run()
这里是没有 kv lang 的代码:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.properties import StringProperty
import random
class YourWidget(Widget):
random_number = StringProperty('')
def __init__(self, **kwargs):
super(YourWidget, self).__init__(**kwargs)
# box layout
box = BoxLayout(size = self.size)
self.add_widget(box)
# button widget
btn = Button(text='Change text', on_release=self.change_text)
box.add_widget(btn)
# label widget
self.random_number = str(random.randint(1, 100))
lbl = Label(text=self.random_number)
box.add_widget(lbl)
def change_text(self, instance):
self.random_number = str(random.randint(1, 100))
class YourApp(App):
def build(self):
return YourWidget()
if __name__ == '__main__':
YourApp().run()
首先,与kv lang程序相比,纯Python程序中的主要小部件(YourWidget)与窗口大小不同。
其次,与 kv lang 程序不同,每当我按下按钮时,标签文本都不会被修改。
有人能告诉我这个程序的 kivy lang 的正确“翻译”是什么吗?
【问题讨论】:
-
源到源交叉编译器,它直接将一种语言的源代码翻译成另一种语言的源代码,可能会有所帮助。这是一篇关于它们的维基百科文章(也将它们描述为转编译器或转译器):en.wikipedia.org/wiki/Source-to-source_compiler - 这是其中许多的维基百科列表:en.wikipedia.org/wiki/…。 . .其中列出了一些 python 交叉编译器;我不知道他们中的任何一个是否会转换 kivy。