我目前正在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。如果有人能让我走上正轨,我将非常感激。
答案 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文件直接加载到您的应用中。