代码之家  ›  专栏  ›  技术社区  ›  Igor Dragushhak

为什么我运行py和kv脚本会得到一个空白屏幕?

  •  1
  • Igor Dragushhak  · 技术社区  · 7 年前

    当我启动程序时,它会给我一个黑屏。我使用python文件作为功能,使用kv文件作为对象的属性。

    import kivy
    kivy.require('1.9.0')
    
    from kivy.app import App
    from kivy.uix.floatlayout import FloatLayout
    
    
    class FloatLayoutApp(App):   
    
        def build(self):
            return FloatLayout()
    
    FlApp = FloatLayoutApp()
    FlApp.run()
    

    kv文件:

    <CustButton@Button>:
        font_size: 32
        color: 0, 0, 0, 1
        size: 150, 50
        background_normal: ""
        background_down: "bg-grey.jpg"
        background_color: .88, .88, .88, 1
        size_hint: .4, .3
    
    <FloatLayout>:
        CustButton:
            text: "Top Left"
            pos_hint: {"x": 0, "top": 0}
        CustButton:
            text: "Bottom Left"
            pos_hint: {"right": 1, "y": 0}
        CustButton:
            text: "Top Right"
            pos_hint: {"right": 1, "top": 1}
        CustButton:
            text: "Bottom Left"
            pos_hint: {"left": 1, "bottom": 0}
        CustButton:
            text: "Center"
            pos_hint: {"center_x": 0, "center_y": 0}
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   ikolim    7 年前

    您将得到一个黑/黑屏,因为在build方法中,它返回一个FloatLayout小部件作为根,并且没有小部件添加到根。

    Kv language » How to load KV

    有两种方法可以将Kv代码加载到应用程序中:

    按名称惯例:

    Kivy在中查找与应用程序类同名的Kv文件

    MyApp -> my.kv
    

    根属性,并用作应用程序小部件树的基础。

    建造商: 你可以告诉Kivy直接加载一个字符串或文件。如果此字符串或文件定义了根小部件,则 方法返回:

    Builder.load_file('path/to/file.kv')
    

    Builder.load_string(kv_string)
    

    解决方案

    这个问题有几种解决办法。

    将kv文件重命名为 floatlayout.kv

    方法2

    <FloatLayout>: 使用根规则, FloatLayout:

    Python脚本

    1. 添加导入语句, from kivy.lang import Builder
    2. 替换 return FloatLayout() 具有 return Builder.load_file('kv-filename.kv')

    输出

    Img01 - Method 1 Img02 - Method 2