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

Kivy如何实现圆角TextInput?有没有更简单的实现方法?

实现Kivy圆角TextInput的可行方案

直接设置radius: [58]无效的原因

原生Kivy的TextInput组件默认没有将radius属性和背景画布的渲染参数绑定,直接声明该属性属于无效配置,不会产生实际效果。

关于Ellipse的说明

你看到的旧方案中提到的Ellipse是Kivy画布系统提供的基础矢量图形组件,可用于绘制椭圆、正圆。在Kivy尚未内置RoundedRectangle组件的早期版本中,开发者需要通过「四个角落放置与背景同色的圆形+中间填充矩形」的方式手动拼接出圆角背景,属于繁琐的老式实现,目前已有更简单的替代方案。

最简实现方案(原生Kivy,无额外依赖)

直接自定义TextInput的画布,用内置的RoundedRectangle绘制圆角背景即可,以下是可直接运行的完整示例:

from kivy.app import App
from kivy.lang import Builder

KV_CODE = '''
<RoundTextInput@TextInput>:
    # 声明自定义的圆角属性
    radius: [10,]
    background_color: 0,0,0,0
    canvas.before:
        Color:
            rgba: (1,1,1,1) # 这里设置输入框的背景色
        RoundedRectangle:
            pos: self.pos
            size: self.size
            radius: root.radius

BoxLayout:
    padding: 20
    spacing: 20
    RoundTextInput:
        hint_text: "默认圆角输入框"
    RoundTextInput:
        radius: [20,0,20,0] # 可以单独设置四个角的圆角值,顺序是左上、右上、右下、左下
        hint_text: "自定义左上右下圆角输入框"
'''

class TestApp(App):
    def build(self):
        return Builder.load_string(KV_CODE)

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

如果需要添加边框,可以在canvas.before里再加一层带圆角的描边:

canvas.before:
    # 先画边框
    Color:
        rgba: (0.2,0.6,1,1) # 边框颜色
    RoundedRectangle:
        pos: (self.x - 1, self.y -1)
        size: (self.width + 2, self.height +2)
        radius: root.radius
    # 再画背景
    Color:
        rgba: (1,1,1,1)
    RoundedRectangle:
        pos: self.pos
        size: self.size
        radius: root.radius

KivyMD框架简化方案

如果你使用KivyMD框架,MDTextField组件已经内置了圆角支持,直接设置radius属性即可生效:

MDTextField:
    hint_text: "KivyMD圆角输入框"
    radius: [15,]
    mode: "filled"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:27:02