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

时间:2017-01-06 19:19:33

标签: python widget kivy

如何在不使用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 个答案:

答案 0 :(得分:6)

以下是不使用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()

build实例的kivy.app.App方法基本上返回了一个主要的widget对象,在本例中是一个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 lang,因为它使代码更简单。

答案 1 :(得分:2)

完全可以使用python专门用kivy编写应用程序。大约6个月前我开始使用kivy并迅速放弃了kv文件。我不喜欢在背景中制作绑定的“神奇”代码。我知道这是一个偏好的东西,现在我知道小部件和布局如何工作,实际上使用kv语言可能更快。您需要手动执行的操作是在整个窗口小部件树中的窗口小部件之间保留句柄,并使用kivy属性设置绑定。有很多东西需要学习,但一旦你开始学习它,可能性是无穷无尽的。您发现的大多数示例都非常简单,我觉得文档非常有限。我觉得如果你对python感到满意,你会真正了解更多关于如果你留在python中kivy的工作方式。

我将Nykakin的回答标记为正确,但我只是想分享一些细节。