我想通過在純Python中編寫等價物來理解kv lang。我直接將kivy lang翻譯成Python的嘗試失敗了。這些程序的外觀和行爲完全不同!從kv lang直接翻譯到Python
下面是使用千伏郎的代碼:
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()
這裏是不千伏郎的代碼:
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()
首先,在純Python程序的主窗口小部件(YourWidget)不與kv lang程序相比,窗口大小相同。其次,每當我按下按鈕時,標籤文本都不會被修改,這與kv lang程序不同。
有人會告訴我什麼是該程序的kivy lang的正確「翻譯」?
源到源交叉編譯器可直接將一種語言的源代碼翻譯爲另一種語言的源代碼,這可能會有所幫助。這裏有一篇關於他們的維基百科文章(其中也將它們描述爲反編譯器或轉譯器):https://en.wikipedia.org/wiki/Source-to-source_compiler - 以下是其中許多維基百科列表:https:// en.wikipedia.org/wiki/List_of_compilers#Source-to-source_compilers。 。 。其中列出了一些python交叉編譯器;我不知道他們中的任何一個人是否會執掌基維。 –