如何在 Kivy 中的 CSS 中按类名选择小部件?

Posted

技术标签:

【中文标题】如何在 Kivy 中的 CSS 中按类名选择小部件?【英文标题】:How to select widgets by class name like in CSS in Kivy? 【发布时间】:2021-09-10 06:09:23 【问题描述】:

例如,我想为应用程序中的所有按钮添加背景颜色:

<Layout1>:
    <BoxLayout>:
        <Button>:
            text: "btn 1"
        <Button>:
            text: "btn 2"
        <Button>:
            text: "btn 3"
    <Button>:
        text: "Another button outside the boxlayout"

<Layout2>:
    <GridLayout>:
        cols: 2
        <Button>:
            text: "btn 1 in a grid"
        <Button>:
            text: "btn 2 in a grid"

但我不想像这样手动为他们所有人做这件事:

...
    <Button>:
        text: "btn 1"
        background_color: (1, 0, 0, 1)
    <Button>:
        text: "btn 2"
        background_color: (1, 0, 0, 1)
    <Button>:
        text: "btn 3"
        background_color: (1, 0, 0, 1)
...

所以我正在寻找一种更短的方法,比如我们可以将 CSS 中的类放在所有按钮上,并通过类名访问它们。类似的东西:

...
    <Button>:
        text: "btn 1"
        class: "btn_class"
    <Button>:
        text: "btn 2"
        class: "btn_class"
    <Button>:
        text: "btn 3"
        class: "btn_class"
...

在python代码中:

for btn in get_widgets_by_classname("btn_class") :
    btn.background_color = (1, 0, 0, 1)

在文档https://kivy.org/doc/stable/api-kivy.lang.html#overview 中说:

您可以定位特定类别的小部件(类似于 CSS 概念 使用 cls 属性(例如 cls=MyTestWidget)

但我对 cls 属性的使用不是很清楚。

【问题讨论】:

【参考方案1】:

美好的一天。在 kvlang 中,您有两个用于创建模板小部件的选项。

    创建自定义小部件:

自定义小部件允许您创建新的、已定义的小部件。

<CustomButton@Button>:
    background_color: (1,0,0,1)

然后使用下面的语法在任何你想要的地方使用按钮。 CustomButton:

    使用规则:

在脚本的开头,使用以下语法将属性分配给小部件。

<Button>:
    background_color:(1,0,0,1)

创建后调用的任何小部件都将使用这些属性创建。

【讨论】:

以上是关于如何在 Kivy 中的 CSS 中按类名选择小部件?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 Kivy 中的小部件?

Kivy 如何访问子小部件中的小部件

如何传递一个值来初始化 Kivy 中的屏幕小部件?

如何删除 kivy 中的小部件?

如果未动态添加,如何正确删除Kivy中的小部件

Kivy 日期选择器小部件