如何使用Kivy显示文本输入框?

时间:2018-02-01 15:00:47

标签: python kivy kivy-language

我目前正在Kivy为一个学校项目写一个应用程序(我非常需要与Kivy一起跳到最后)。我已经为文本输入编写了kv代码,您可以在下面看到:

 AnswerInput:
 <AnswerInput@BoxLayout>:
    orientation: "vertical"
    BoxLayout:
        height: "40dp"
        size_hint_y: None
        TextInput:
            size_hint_x: 20
        Button:
            text: "Check Answer"
            size_hint_x: 25

我现在需要让文本框显示在Python文件中;但是,我对如何做到这一点感到有些失落?我的Python代码如下:

from kivy.app import App
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label

class TextInputTest(App):

    def __init__(self, *args, **kwargs):
    return TextInput

    if __name__ == '__main__':
        TextInputTest().run()

我几乎可以肯定我在这里遗漏了一些东西,可能是非常简单的东西,但我非常喜欢Kivy。如果有人能让我走上正轨,我将非常感激。

1 个答案:

答案 0 :(得分:0)

首先,这不清楚,但您需要将代码分成py文件和kv文件。看来你已经做到了这一点。您的kv文件也需要全部小写

在py文件中,然后为kivy小部件添加一个类。在这种情况下:

from kivy.uix.boxlayout import BoxLayout

class AnswerInput(BoxLayout):
    pass

然后在你的kv文件中:

 <AnswerInput>:
    orientation: "vertical"
    BoxLayout:
        height: "40dp"
        size_hint_y: None
        TextInput:
            size_hint_x: 20
        Button:
            text: "Check Answer"
            size_hint_x: 25

来自你的py的AnswerInput查看你加载的kv文件,看看是否有一个与自身同名的根小部件。

(RootWidget意味着包含在&lt;&gt;中的一堆kv逻辑的顶部窗口小部件)

然而,您必须首先知道如何加载kv文件,有两种方法可以执行此操作。如果您只使用一个kv文件,则可以将您的应用命名为与您的kv文件相同。

所以如果你的kv文件是

textinputtest.kv

py中的app类会读取

TextInputTest(App): 
or 
TextInputTestApp(App):

您不需要这样做,您也可以使用构建器模块加载文件本身(事实上,如果您有多个kv文件,则需要执行此操作)。

为此,请在py文件中执行此操作:

from kivy.lang.builder import Builder

Builder.load_file('textinputtest.kv')

您还要返回textinput类的对象,您要做的是返回自定义textinput类的对象。

你的Py文件​​看起来像这样:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

class AnswerInput(BoxLayout):
    pass

class TextInputTest(App): # If your kv file is called textinputtest.kv

    def build(self):
        return AnswerInput()

if __name__ == '__main__':
    TextInputTest().run()

或者您可以根据需要为应用命名,然后使用构建器将相关的kv文件直接加载到您的应用中。