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
相关产品推荐
相关产品推荐

