You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何导入并通过关键字参数实例化Python KivyMD自定义类?

问题解决方案

1. 解决空白窗口+界面延迟显示问题

这个问题几乎都是重复启动App实例导致的:

  • 检查自定义类的kv文件,绝对不能包含App().run()这类代码,kv文件只负责定义控件样式规则,不要写启动逻辑。
  • 确保只有调用代码里的主App是唯一启动入口,不要在自定义类的Python文件里调用run()。

2. 实现关键字参数实例化自定义类

要让自定义类支持关键字参数,必须完成以下两步:

步骤1:在Python类中声明可绑定属性

from kivymd.uix.card import MDCard
from kivy.properties import StringProperty, NumericProperty
from kivy.lang import Builder

Builder.load_file("my_tile_item.kv")

class MyTileItem(MDCard):
    # 声明需要通过关键字传参的属性,比如文本、高度等
    tile_text = StringProperty("默认文本")
    tile_height = NumericProperty(100)

    def __init__(self, **kwargs):
        # 必须把kwargs传递给父类的__init__方法
        super().__init__(**kwargs)

步骤2:在kv文件中绑定这些属性

<MyTileItem>:
    size_hint_y: None
    height: root.tile_height  # 绑定Python类的高度属性
    padding: 12
    MDLabel:
        text: root.tile_text  # 绑定Python类的文本属性

步骤3:调用时直接传关键字参数

from kivymd.app import MDApp
from my_tile_item import MyTileItem
from kivymd.uix.boxlayout import MDBoxLayout

class MainApp(MDApp):
    def build(self):
        layout = MDBoxLayout(orientation="vertical", padding=20)
        # 直接用关键字参数实例化自定义类
        my_tile = MyTileItem(tile_text="我的自定义Tile", tile_height=120)
        layout.add_widget(my_tile)
        return layout

if __name__ == "__main__":
    MainApp().run()

3. 解决关闭窗口时的Shader IndexError

这个错误是多App实例导致的资源释放冲突,按以下步骤修复:

  • 关闭所有Python相关进程,彻底清理残留的窗口实例。
  • 确保整个项目中只有一处App().run()调用(即主程序入口)。
  • 不要在自定义类的初始化或kv文件中触发任何App启动逻辑。

内容的提问来源于stack exchange,提问作者Aaron Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:07:54