【问题标题】:How to get a text input box to display with Kivy?如何让文本输入框与 Kivy 一起显示?
【发布时间】:2018-02-01 15:00:47
【问题描述】:

我目前正在为一个学校项目在 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 的初学者。如果有人能让我走上正轨,我将不胜感激。

【问题讨论】:

  • 如果 name__== '__main' 不应该在您的班级内
  • 查看描述How to load KV的kv语言文档

标签: python kivy kivy-language


【解决方案1】:

首先,这并不清楚,但您需要将代码分成 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 表示 中包含的一堆 kv 逻辑的顶部小部件)

但是,您必须首先知道如何加载 kv 文件,有两种方法可以做到这一点。如果您只使用一个 kv 文件,您可以将您的应用程序命名为与您的 kv 文件相同的名称。

所以如果你的kv文件是

textinputtest.kv

您在 py 中的应用程序类会读取

TextInputTest(App): 
or 
TextInputTestApp(App):

你不需要这样做,你也可以使用builder模块来加载文件本身(事实上,如果你有多个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()

或者您可以为您的应用命名任何您想要的名称,然后使用 builder 将相关的 kv 文件直接加载到您的应用中。

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2013-12-05
    • 2019-02-07
    • 2019-10-14
    相关资源
    最近更新 更多