Kivy网格按钮颜色修改难题:如何保留独立背景区分按钮
解决Kivy按钮背景与网格背景混淆的问题
问题根源
当你给Actions按钮设置background_normal: ''时,Kivy会清除按钮的默认背景图,此时background_color会直接填充整个按钮区域。而你的StackLayout没有设置独立背景,导致按钮的浅蓝色和布局默认的透明背景混在一起,看起来像是整块单色。之前你尝试用canvas.before添加白色矩形但被覆盖,大概率是没有正确绑定布局的pos和size,导致绘制的矩形位置或尺寸不对。
解决方案:给父布局添加明确背景
直接给包含按钮的StackLayout通过canvas.before绘制白色背景,就能让按钮和布局清晰区分开。修改后的完整代码如下:
<Actions@Button>: text_align: "left" valign: "top" size_hint: 1, 0.2 text_size: self.size font_size: self.height * 0.45 padding_x: int(self.width * 0.03) padding_y: (self.height * 0.2) color: 0, 0, 0 background_color: utils.get_color_from_hex('#c9deff') background_normal: '' <SecondScreen@Screen>: GridLayout: cols: 1 GridLayout: cols: 4 size_hint: 1, 0.44 StackLayout: orientation: "lr-tb" spacing_hint: 0.1, 0.1 size_hint: 0.3, 1 minimum_width: self.parent.width * 0.3 # 给StackLayout添加白色背景 canvas.before: Color: rgba: 1, 1, 1, 1 # 白色,rgba格式 Rectangle: pos: self.pos size: self.size Actions: text: "A" on_press: root.manager.current = 'first' Actions: text: "B" on_press: root.manager.current = 'first' Actions: text: "C" on_press: root.manager.current = 'first'
另一种可选方案:保留按钮默认背景结构
如果你不想用background_normal: '',可以准备一张1x1的透明PNG图片(命名为transparent.png),将按钮的background_normal设置为这张图,这样既能让background_color生效,又能保留按钮默认的边框结构,避免难看的灰色色调:
<Actions@Button>: # 其他属性保持不变 background_color: utils.get_color_from_hex('#c9deff') background_normal: 'transparent.png'
这样按钮会呈现你设置的浅蓝色,同时自带轻微边框效果,和父布局背景自然区分开。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

