不使用kv语言创建Kivy小部件?

5
如何在不使用kv语言和kv文件的情况下创建Kivy小部件?我是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标签的颜色?

谢谢。

2个回答

9
以下是一个不使用kv语言编写的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 方法返回一个主控件对象,在这种情况下是一个 kivy.uix.Label 实例。要创建更复杂的小部件,您应该创建一些布局类的子类,然后使用 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语言,因为它可以让代码更简单。


7
完全可以使用Python来编写带有Kivy的应用程序。我大约6个月前开始使用Kivy,并迅速放弃了kv文件。我不喜欢在后台使用“神奇”的代码进行绑定。我知道这是一种偏好,现在我知道了小部件和布局的工作原理,使用kv语言可能会更快。你需要手动处理小部件树中的小部件之间的句柄,并使用Kivy属性设置绑定。有很多东西要学习,但一旦你开始理解它,可能性就是无限的。大多数你找到的例子都非常简单,我觉得文档非常有限。如果你对Python感到舒适,那么如果你留在Python中,你实际上将学到更多关于Kivy如何工作的知识。
我将Nykakin的答案标记为正确,但我只是想分享一些细节。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接