如何在Kivy中动态更改标签背景颜色

2024-09-26 17:43:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着做一个简单的清单程序。那里是“添加”、“删除”和“执行”按钮。但我对标签的颜色有一些缺陷。当我在scrollview中单击“DO IT”按钮时,标签颜色会发生变化,但当我单击remove按钮时,一些颜色的标签会发生变化。我用的是帆布。我怎样才能解决这个问题?

class Home(Screen):

    def __init__(self,**kwargs):
        super(Home,self).__init__(**kwargs)

    def addWidget(self):
        task_input = self.ids.task_input.text
        newListItem = EachTask(text=task_input , 
        id=str((len(self.ids.add_field.children))) )
        print(newListItem.id)
        self.ids.add_field.add_widget(newListItem)
class EachTask(BoxLayout):
    def __init__(self, text= "", **kwargs):
        super(EachTask,self).__init__(**kwargs)
        self.ids.label.text = text

    def Do_Task(self,instance):
        child = instance.parent.parent
        with self.canvas.before:
            Color(.5,1,.2,1, mode='rgba')
            Rectangle(pos=child.ids.label.pos, size=child.ids.label.size)

kv_文件

^{pr2}$

Tags: textselfaddidstaskinputinit颜色
1条回答
网友
1楼 · 发布于 2024-09-26 17:43:24

为了解决这个问题,需要对kv和py文件进行以下增强。在

方法1-Kivy自动创建并添加了一个ObjectProperty rgba

Kivy automatically created & added an ObjectProperty

If the widget doesn’t have a property with the given name, an ObjectProperty will be automatically created and added to the widget.

kv文件

  1. 添加一个类属性rgba,并将其初始化为默认颜色,(1, .2, .2, .2)到类规则<EachTask>:
  2. 将标签颜色替换为root.rgba

代码片段-kv文件

<EachTask>:
    rgba: (1,.2,.2,.2)    # Kivy auto created & added ObjectProperty, "rgba"
    ...
    BoxLayout:
        Label:
            size_hint_x: .8
            id: label
            canvas.before:
                Color:
                    rgba: root.rgba
                ...

py文件

  1. 删除方法Do_Task()中的所有代码
  2. 添加self.rgba = [.5, 1, .2, 1],其中{}引用当前小部件,即EachTask对象。在

Snippets-py文件

^{pr2}$

方法2-显式声明rgba

kv文件

  1. rgba: (1,.2,.2,.2)替换为root.rgba

代码片段-kv文件

<EachTask>:
    ...
    BoxLayout:
        Label:
            size_hint_x: .8
            id: label
            canvas.before:
                Color:
                    rgba: root.rgba
                ...

py文件

  1. 添加import语句,from kivy.properties import ListProperty
  2. 声明ListProperty类型的类属性rgba,并将其初始化为默认颜色,[1, .2, .2, .2]在类EachTask()
  3. 删除方法Do_Task()中的所有代码
  4. 添加self.rgba = [.5, 1, .2, 1],其中{}引用当前小部件,即EachTask对象。在

Snippets-py文件

from kivy.properties import ListProperty
...
class EachTask(BoxLayout):
    rgba = ListProperty([1, .2, .2, .2])
    ...
    def Do_Task(self, instance):
        self.rgba = [.5, 1, .2, 1]

相关问题 更多 >

    热门问题