如何为Kivy中的设置创建自定义类型?
我想在Kivy的设置面板中添加一个选择颜色的功能,用来为我的应用程序的一些线条、背景等选择颜色。
我已经在Kivy的设置面板中添加了一种新的颜色选择器类型,基本上快要成功了。但是我遇到一个问题,就是当前选中的颜色的值没有在设置面板中显示出来。(缺少的文本在下面截图中的红圈里)
我觉得这个问题应该很简单,但我还没有找到解决办法。我的类叫做SettingColorPicker(基类是SettingItem),如果我把它改名为SettingString并删除原来的SettingString类,它就能正常工作。我不知道为什么会这样?!
我这样注册了新的类型:
s = Settings()
s.register_type('colorpicker', SettingColorPicker)
我的其余代码和SettingPath类的代码很相似。我只是创建了一个颜色选择器,而不是文件选择器。
那位置的标签是从哪里获取它的值的呢?我在源代码中没有找到相关内容,链接在这里:https://github.com/kivy/kivy/blob/master/kivy/uix/settings.py
我还想把那个标签中的文本颜色改成当前选中的颜色。我该怎么做呢?不过如果我明白标签是怎么创建的,这个应该不难。
这是我点击“BG color”文本时的样子(这是Kivy中包含的颜色选择器):
你可以在这里找到源代码: https://gist.github.com/AWolf81/421976e65099d3e58a32
你可以直接运行它,看看描述的问题。
1 个回答
好的,正如预期的那样,解决办法其实很简单。
我在Kivy的文件里找到了SettingString,发现了一个kv文件,路径是C:\Kivy-1.8.0-py2.7-win32\kivy\kivy\data\style.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 ''
''')
我把这些代码加到了我创建SettingColorPicker类的文件里。你也可以直接把它加到'style.kv'文件里,这样也应该能行,但我没有测试过。
给颜色上色也很简单,只需要用root.value来设置标签的颜色。请注意,你需要把它转换成rgba格式的元组,方法是用kivy.utils.get_color_from_hex(root.value)。