python仅识别一个.kv文件时如何解决

时间:2019-04-18 21:20:15

标签: python kivy

我今天才开始学习Kivy。我指的书是使用kv文件。问题是,当我创建多个.kv文件时,而当我导入另一个.kv文件时,它不起作用。请问任何详细的帮助,因为我是一个完整的初学者。谢谢

我已经搜索了很多,并在一些地方尝试过,但是似乎没有任何作用。

main.py

    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.widget import Widget
    from kivy.lang import Builder

    class AddLocationForm(BoxLayout):
        pass

    class WeatherApp(App):
        pass

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

AddLocationForm.kv

    AddLocationForm:
    <AddLocationForm@BoxLayout>:
        orientation: "vertical"
        BoxLayout:
            TextInput:
            Button:
                text: "Search"
            Button:
                text: "Current Location"

weather.kv

    BoxLayout:
        Label:
            text: "Hello"
        Label:
            text: "Awesome"
        Label:
            text: "World"

我希望它打印字符串,并同时显示按钮。

2 个答案:

答案 0 :(得分:0)

使用Kv语言指令include <file>

摘要-weather.kv

#:include AddLocationForm.kv

AddLocationForm:
    BoxLayout:
        Label:
            text: "Hello"
        Label:
            text: "Awesome"
        Label:
            text: "World"

代码段-AddLocationForm.kv

<AddLocationForm@BoxLayout>:
    orientation: "vertical"
    BoxLayout:
        TextInput:
        Button:
            text: "Search"
        Button:
            text: "Current Location"

输出

Result

Kv language » Lang Directives

include <file>
     

语法:

#:include [force] <file>
     

包括一个外部kivy文件。这使您可以拆分复杂   小部件放入自己的文件中。如果强制包含,文件将   首先要卸载,然后再次重新加载。例如:

# Test.kv
#:include mycomponent.kv
#:include force mybutton.kv

<Rule>:
    state: 'normal'
    MyButton:
    MyComponent:

# mycomponent.kv
#:include mybutton.kv

<MyComponent>:
    MyButton:
# mybutton.kv

<MyButton>:
    canvas:
        Color:
            rgb: (1.0, 0.0, 0.0)
        Rectangle:
            pos: self.pos
            size: (self.size[0]/4, self.size[1]/4)

答案 1 :(得分:0)

您还可以使用Builder加载kv文件或字符串。

from kivy.lang import Builder

Builder.load_file("kvfile1.kv")
Builder.load_file("kvfile2.kv")