十六进制的Kivy标签背景颜色

时间:2019-04-13 09:45:28

标签: kivy

是否可以将Label背景颜色设置为类似于下面的十六进制值 妖精?

#:import hex kivy.utils.get_color_from_hex

#:set gray_dark hex('#c2c2c2')

<Label@Label>
    background_normal: ''
    bcolor: gray_dark
    canvas.before:
        Color:
            rgba: self.bcolor
        Rectangle:
            pos: self.pos
            size: self.size

对我而言唯一有效的方法是将bcolor:设置为rgba值。即使我可以将颜色定义为rgba但在顶部如下进行一次设置也可以:

#:import hex kivy.utils.get_color_from_hex

#:set gray_dark (0.752, 0.745, 0.745, 1)

<Label@Label>
    background_normal: ''        
    bcolor: gray_dark
    canvas.before:
        Color:
            rgba: self.bcolor
        Rectangle:
            pos: self.pos
            size: self.size

两个代码都引发错误:

TypeError: 'NoneType' object is not iterable

这很明显,因为十六进制不是列表。

1 个答案:

答案 0 :(得分:0)

根本原因

遇到以下错误,因为在应用启动时,属性bcolor的值为None

  

TypeError:“ NoneType”对象不可迭代

解决方案

添加if...else语句以检查None的值。

摘要

    canvas.before:
        Color:
            rgba: (0, 0, 0, 1)  if self.bcolor is None else self.bcolor

注意

以下示例说明了将hex()直接分配给rgba

canvas.before:
    Color:
        rgba: hex('#c2c2c2')
    Rectangle:
        pos: self.pos
        size: self.size

示例

main1.py

from kivy.base import runTouchApp
from kivy.lang import Builder

runTouchApp(Builder.load_string("""
#:import hex kivy.utils.get_color_from_hex
#:import sp kivy.metrics.sp

#:set gray_dark hex('#c2c2c2')

<Label@Label>
    background_normal: ''
    bcolor: gray_dark
    color: (0, 0, 0, 1)
    text: "set gray_dark hex('#c2c2c2')"
    font_size: sp(30)
    canvas.before:
        Color:
            rgba: (0, 0, 0, 1)  if self.bcolor is None else self.bcolor
        Rectangle:
            pos: self.pos
            size: self.size

Label:

"""))

输出

Example 1 Example 2