Kivymd中MDRoundFlatButton的line_width等属性不生效如何解决
问题原因
MDRoundFlatButton组件原生没有实现边框渲染逻辑,line_width、line_color是组件继承的通用属性,默认不会被调用绘制,因此设置后没有视觉效果。另外你代码里写的line_width:40数值远大于常规按钮高度,就算生效也无法正常显示。
解决方案
方案1:替换为原生支持边框的按钮组件
直接改用MDOutlinedButton,该组件原生支持边框相关属性,设置后直接生效,修改后的代码如下:
from kivymd.app import MDApp from kivy.lang import Builder Root=""" #:import hex kivy.utils.get_color_from_hex BoxLayout: id:Layout_1 padding: 20 MDOutlinedButton: size_hint:None,None text:"带边框的按钮" theme_text_color: "Custom" text_color: 0,0,0,1 font_size:16 size: 400, 60 # 边框属性直接生效 line_width: 2 line_color: hex("#FF5722") """ class Main(MDApp): def build(self): return Builder.load_string(Root) Main().run()
方案2:保留MDRoundFlatButton,手动添加边框绘制
如果必须使用MDRoundFlatButton,可以在组件的canvas中手动添加边框绘制逻辑,代码如下:
from kivymd.app import MDApp from kivy.lang import Builder Root=""" #:import hex kivy.utils.get_color_from_hex BoxLayout: id:Layout_1 padding: 20 MDRoundFlatButton: size_hint:None,None text:"MDRoundFlatButton手动加边框" theme_text_color: "Custom" text_color: 0,0,0,1 font_size:16 size: 400, 60 # 自定义边框参数 my_line_width: 3 my_line_color: hex("#2196F3") canvas.before: Color: rgba: self.my_line_color Line: width: self.my_line_width rounded_rectangle: (self.x, self.y, self.width, self.height, self.height/2) """ class Main(MDApp): def build(self): return Builder.load_string(Root) Main().run()
注意事项
- 边框宽度建议设置为1-4即可,过大的数值会超出按钮显示范围
- 如果使用的KivyMD版本低于1.0.0,建议先升级到最新稳定版本再测试
内容的提问来源于stack exchange,提问作者Ctrl7
相关产品推荐
相关产品推荐

