不使用 kv 语言创建 Kivy 小部件?
Create Kivy widgets without using kv language?
如何在不使用kv语言和.kv文件的情况下创建Kivy小部件?我是基维的新手。我通常使用 Tkinter,但我发现 Kivy 非常适合创建 Android 应用程序,所以我正在学习如何使用它。
我知道 Kivy 小部件是使用 .kv 文件制作的,但我想像 Tkinter 中的小部件一样创建它们。
# Creating widgets in tkinter:
# We'll assume tkinter is imported as tk
label_1 = tk.Label(text='Hello World', bg='white')
label_1.pack()
# Creating widgets using Kivy in .py file
label_1 = Label(text='Hello World') # eg. Not able to set color!
add_widget(label_1)
# Creating widgets using kv language
Label:
text: "Hello World"
color: 1,0,0,1
那么,有什么方法可以完全在 python 中制作 Kivy 小部件吗?我如何直接在 python 中设置 Kivy 标签颜色?
谢谢。
下面是一个不使用 kv lang 的 Kivy 应用程序示例:
from kivy.app import App
from kivy.uix.label import Label
class TestApp(App):
def build(self):
return Label(
text='Hello, world',
color=(1, 0, 0, 1)
)
TestApp().run()
基本上,kivy.app.App
实例的 build
方法有一个 return 主窗口小部件对象,在本例中是一个 kivy.uix.Label
实例。要拥有更复杂的小部件,您应该创建一些布局 class 的子 class,然后使用 add_widget
方法添加小部件。
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
class TestWidget(BoxLayout):
def __init__(self, **args):
super(TestWidget, self).__init__(**args)
label = Label(
text='Hello, world',
color=(1, 0, 0, 1))
self.add_widget(label)
class TestApp(App):
def build(self):
return TestWidget()
TestApp().run()
无论如何我都鼓励你使用 kv lang,因为它使代码更简单。
完全可以python专门用kivy写app。我大约 6 个月前开始使用 kivy,很快就放弃了 kv 文件。我不喜欢在后台进行绑定的 "magical" 代码。我知道这是一个偏好的事情,现在我知道小部件和布局是如何工作的,使用 kv 语言实际上可能更快。您需要手动做的事情是在整个小部件树中保持小部件之间的句柄,并使用 kivy 属性设置绑定。有很多东西要学,但一旦你开始掌握它,可能性是无穷无尽的。您找到的大多数示例都非常简单,我觉得文档非常有限。我觉得如果你对 python 感到满意,如果你留在 python,你实际上会更多地了解 kivy 是如何工作的。
我将 Nykakin 的回答标记为正确,但我只是想分享一些细节。
如何在不使用kv语言和.kv文件的情况下创建Kivy小部件?我是基维的新手。我通常使用 Tkinter,但我发现 Kivy 非常适合创建 Android 应用程序,所以我正在学习如何使用它。 我知道 Kivy 小部件是使用 .kv 文件制作的,但我想像 Tkinter 中的小部件一样创建它们。
# Creating widgets in tkinter:
# We'll assume tkinter is imported as tk
label_1 = tk.Label(text='Hello World', bg='white')
label_1.pack()
# Creating widgets using Kivy in .py file
label_1 = Label(text='Hello World') # eg. Not able to set color!
add_widget(label_1)
# Creating widgets using kv language
Label:
text: "Hello World"
color: 1,0,0,1
那么,有什么方法可以完全在 python 中制作 Kivy 小部件吗?我如何直接在 python 中设置 Kivy 标签颜色?
谢谢。
下面是一个不使用 kv lang 的 Kivy 应用程序示例:
from kivy.app import App
from kivy.uix.label import Label
class TestApp(App):
def build(self):
return Label(
text='Hello, world',
color=(1, 0, 0, 1)
)
TestApp().run()
基本上,kivy.app.App
实例的 build
方法有一个 return 主窗口小部件对象,在本例中是一个 kivy.uix.Label
实例。要拥有更复杂的小部件,您应该创建一些布局 class 的子 class,然后使用 add_widget
方法添加小部件。
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
class TestWidget(BoxLayout):
def __init__(self, **args):
super(TestWidget, self).__init__(**args)
label = Label(
text='Hello, world',
color=(1, 0, 0, 1))
self.add_widget(label)
class TestApp(App):
def build(self):
return TestWidget()
TestApp().run()
无论如何我都鼓励你使用 kv lang,因为它使代码更简单。
完全可以python专门用kivy写app。我大约 6 个月前开始使用 kivy,很快就放弃了 kv 文件。我不喜欢在后台进行绑定的 "magical" 代码。我知道这是一个偏好的事情,现在我知道小部件和布局是如何工作的,使用 kv 语言实际上可能更快。您需要手动做的事情是在整个小部件树中保持小部件之间的句柄,并使用 kivy 属性设置绑定。有很多东西要学,但一旦你开始掌握它,可能性是无穷无尽的。您找到的大多数示例都非常简单,我觉得文档非常有限。我觉得如果你对 python 感到满意,如果你留在 python,你实际上会更多地了解 kivy 是如何工作的。
我将 Nykakin 的回答标记为正确,但我只是想分享一些细节。