如何在Kivy中为设置创建自己的类型?

时间:2014-05-24 13:38:19

标签: python settings kivy

我想扩展一个Kivy设置面板,为我的应用选择某些线条/背景等颜色。

我已将ColorPicker的新类型添加到Kivy设置面板,它几乎正常工作。但我有一个问题,即当前拾取的颜色的值不会显示在设置面板中。 (缺少文字见下面的红色圆圈截图)

value text missing

我认为这是一个简单的问题,但我还没有找到解决办法。我的类具有名称SettingColorPicker(基类SettingItem),如果我将其重命名为SettingString并删除原始的SettingString类,而不是按预期工作。我不知道为什么?!

我注册了这样的新类型:

   s = Settings()
   s.register_type('colorpicker', SettingColorPicker)

我的其余代码与Class SettingPath代码相似。我只创建了一个颜色选择器而不是FileChooser。

这个位置的标签在哪里获得它的价值?我还没在源代码https://github.com/kivy/kivy/blob/master/kivy/uix/settings.py

中找到它

我还希望将该标签中文字的颜色更改为当前选定的颜色。我怎样才能做到这一点?但如果我在创建标签的地方进行解读,那可能很容易。

以下是我点击文字' BG颜色' (它是Kivy中包含的ColorPicker): ColorPicker in action

您可以在此处找到源代码: https://gist.github.com/AWolf81/421976e65099d3e58a32

您可以直接运行它以查看所描述的问题。

1 个答案:

答案 0 :(得分:4)

好的,正如预期的那样,修复非常简单。

我在Kivy文件中搜索了SettingString,我在C:\ Kivy-1.8.0-py2.7-win32 \ kivy \ kivy \ data \ style.kv中找到了一个kv文件:

    731: <SettingString>:
    732:      Label:
    733:          text: root.value or ''

这就是为什么它适用于重命名的类名。只是新类型缺少KV定义。

添加以下行可解决问题:

    from kivy.lang import Builder
    Builder.load_string(
    '''
    <SettingColorPicker>:
        Label:
            text: root.value or ''
    ''')

我将这些行添加到我创建了Class SettingColorPicker的文件中。您可以将它添加到&#39; style.kv&#39;直接归档。这也应该有用,但我还没有测试过。

着色也很简单,只需使用root.value作为标签颜色即可。请注意,您必须使用kivy.utils.get_color_from_hex(root.value)将其转换为rgba元组。

Working example with coloring