【问题标题】:How to create an own type for a setting in Kivy?如何在 Kivy 中为设置创建自己的类型?
【发布时间】:2014-07-13 18:47:13
【问题描述】:

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

我在 Kivy 设置面板中添加了一个新的 ColorPicker 类型,它几乎可以工作了。但是我的问题是当前选择的颜色的值没有显示在设置面板中。 (缺少文字见下图红圈)

我认为这是一个简单的问题,但我还没有找到解决方法。我的类的名称为 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),效果如下:

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

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

【问题讨论】:

    标签: python settings kivy


    【解决方案1】:

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

    我在 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 ''
        ''')
    

    我将这些行添加到创建类 SettingColorPicker 的文件中。您可以直接将其添加到“style.kv”文件中。这也应该可以,但我还没有测试过。

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

    【讨论】:

      猜你喜欢
      • 2019-12-14
      • 2021-12-27
      • 2010-09-28
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      相关资源
      最近更新 更多