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

Python Kivy创建自定义部件并修改尺寸、位置、颜色多次复用的实现问题

错误原因
  • 核心错误是你自定义的RLB部件类没有预先定义color属性,Kivy无法识别你在kv文件中给RLB实例设置的color参数,也无法在canvas渲染时读取self.color。
  • 次要问题:原有代码缺少基础导入语句,且布局未绑定位置会出现显示偏移。
修正后的完整代码

1. .py文件代码

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ListProperty # 导入Kivy响应式属性类

class RLB(Widget):
    # 定义color属性,默认值为半透灰色,支持后续动态修改自动刷新界面
    color = ListProperty([0.5, 0.5, 0.5, 1])

class Bars(Widget):
    pass

class FGHApp(App):
    pass

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

2. FGH.kv文件代码

#My custom widget
Bars:

<RLB>:
    canvas:
        Color:
            rgba:self.color
        RoundedRectangle:
            pos:self.pos
            size:self.size
            radius: [10]
<Bars>:
    FloatLayout:
        size:root.size
        pos:root.pos # 补充布局位置绑定,避免显示偏移
        RLB:
            color:(1,0,1,1)
            pos:(100,100)
            size:(200,200)
        RLB:
            color:(1,0,0,0.5)
            pos:(300,300)
            size:(200,200)
自定义部件复用说明
  • 你可以在任意布局中直接调用RLB部件,给每个实例设置不同的color、pos、size参数即可实现多次复用,和Button、Label等内置部件用法完全一致。
  • 如果需要新增其他自定义属性(比如圆角半径、边框粗细),只需要在RLB类中用对应的Kivy属性类(ListProperty、NumericProperty等)预先声明,再在kv的canvas规则里绑定即可,属性修改后会自动触发界面重绘,无需手动刷新。

内容的提问来源于stack exchange,提问作者Abhay Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:27:00