Python 如何在kivy中更改模板值

Python 如何在kivy中更改模板值,python,kivy,Python,Kivy,首先,我为我的英语道歉,我不是以英语为母语的人 我正在为我的应用程序开发一个“主题选择器”,制作一个“按钮模板”,我不知道它是否是这样调用的,但至少在文档中是这样说的。工作正常,所有按钮都具有相同的属性 现在,当我点击一个按钮(在主题选择器屏幕中)时,我想从这个“模板”更改“背景颜色” 由于它在ScreenManager之外,我找不到一种方法来操作它,我尝试在不同的地方使用ListProperty,但似乎没有任何效果,在google中也找不到任何答案 制作了一个简单的新GUI来表示我想要做的事情

首先,我为我的英语道歉,我不是以英语为母语的人

我正在为我的应用程序开发一个“主题选择器”,制作一个“按钮模板”,我不知道它是否是这样调用的,但至少在文档中是这样说的。工作正常,所有按钮都具有相同的属性

现在,当我点击一个按钮(在主题选择器屏幕中)时,我想从这个“模板”更改“背景颜色”

由于它在ScreenManager之外,我找不到一种方法来操作它,我尝试在不同的地方使用ListProperty,但似乎没有任何效果,在google中也找不到任何答案 制作了一个简单的新GUI来表示我想要做的事情

main.py

from kivy.app import App 
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.properties import StringProperty, NumericProperty,ListProperty, ObjectProperty
from kivy.uix.boxlayout import BoxLayout


class Screen3(Screen):
    pass

class Screen2(Screen):
    pass

class Screen1(Screen):
    pass

class ScreenManager(ScreenManager):
    pass

class TestApp(App):
    def build(self):
        return ScreenManager(transition=NoTransition())


if __name__ == "__main__":
    TestApp().run()

test.kv
:
颜色:1,1,1,1
背景\u正常:“”
背景颜色:[1,0.275,0.333,1]#红色
#背景颜色:[0,0,1,1]#下一种颜色
:
屏幕1:
屏幕2:
屏幕3:
:
名称:“屏幕1”
盒子布局:
方向:“垂直”
间距:10
填充:10
标签:
文本:“测试”
按钮:
文本:“下一屏幕”
按:root.manager.current='Screen2'
盒子布局:
方向:“水平”
间距:10
填充:10
按钮:
文本:“ChangeColor1”
按钮:
文本:“ChangeColor2”
:
名称:“屏幕2”
盒子布局:
方向:“垂直”
间距:10
填充:10
标签:
文本:“Test2”
按钮:
文本:“下一屏幕”
按:root.manager.current='Screen3'
:
名称:“屏幕3”
盒子布局:
方向:“垂直”
间距:10
填充:10
标签:
文本:“Test3”
按钮:
文本:“下一屏幕”
按:root.manager.current='Screen1'

希望有人能帮助我,提前谢谢

您可以使用kivy
属性
,方法是在
应用程序中定义该
属性
,并在
kv
中引用它。在
应用程序中
,只需如下定义
属性

class TestApp(App):
    bg_color = ListProperty([1, 0.275, 0.333, 1])
然后访问kv中的
bg_颜色

<Button>:
    color: 1,1,1,1
    background_normal: ''
    background_color: app.bg_color  # reference the bg_color Property of the App

<ScreenManager>:
    Screen1:
    Screen2:
    Screen3:

<Screen1>:
    name: "Screen1"
    BoxLayout:
        orientation:"vertical"
        spacing: 10
        padding: 10
        Label:
            text: "Test"
        Button:
            text:"Next Screen"
            on_press: root.manager.current = 'Screen2'

        BoxLayout:
            orientation:"horizontal"
            spacing: 10
            padding: 10
            Button:
                text:"ChangeColor1"
                on_release: app.bg_color = [0, 0, 1, 1]  # adjust the bg_color Property of the App
            Button:
                text:"ChangeColor2"
                on_release: app.bg_color = [0, 1, 0, 1]  # adjust the bg_color Property of the App

<Screen2>:
    name: "Screen2"
    BoxLayout:
        orientation:"vertical"
        spacing: 10
        padding: 10
        Label:
            text: "Test2"
        Button:
            text:"Next Screen"
            on_press: root.manager.current = 'Screen3'
        

<Screen3>:
    name: "Screen3"
    BoxLayout:
        orientation:"vertical"
        spacing: 10
        padding: 10
        Label:
            text: "Test3"
        Button:
            text:"Next Screen"
            on_press: root.manager.current = 'Screen1'
:
颜色:1,1,1,1
背景\u正常:“”
背景颜色:app.bg\u颜色#引用应用程序的bg\u颜色属性
:
屏幕1:
屏幕2:
屏幕3:
:
名称:“屏幕1”
盒子布局:
方向:“垂直”
间距:10
填充:10
标签:
文本:“测试”
按钮:
文本:“下一屏幕”
按:root.manager.current='Screen2'
盒子布局:
方向:“水平”
间距:10
填充:10
按钮:
文本:“ChangeColor1”
发布时:app.bg_color=[0,0,1,1]#调整应用程序的bg_color属性
按钮:
文本:“ChangeColor2”
发布时:app.bg_color=[0,1,0,1]#调整应用程序的bg_color属性
:
名称:“屏幕2”
盒子布局:
方向:“垂直”
间距:10
填充:10
标签:
文本:“Test2”
按钮:
文本:“下一屏幕”
按:root.manager.current='Screen3'
:
名称:“屏幕3”
盒子布局:
方向:“垂直”
间距:10
填充:10
标签:
文本:“Test3”
按钮:
文本:“下一屏幕”
按:root.manager.current='Screen1'

在上述
kv
代码中,
bg\u color
属性在
规则中引用,并由
ChangeColor
按钮修改。

您可以通过在
应用程序中定义
属性,并在
kv
中引用,来使用kivy
属性。在
应用程序中
,只需如下定义
属性

class TestApp(App):
    bg_color = ListProperty([1, 0.275, 0.333, 1])
然后访问kv中的
bg_颜色

<Button>:
    color: 1,1,1,1
    background_normal: ''
    background_color: app.bg_color  # reference the bg_color Property of the App

<ScreenManager>:
    Screen1:
    Screen2:
    Screen3:

<Screen1>:
    name: "Screen1"
    BoxLayout:
        orientation:"vertical"
        spacing: 10
        padding: 10
        Label:
            text: "Test"
        Button:
            text:"Next Screen"
            on_press: root.manager.current = 'Screen2'

        BoxLayout:
            orientation:"horizontal"
            spacing: 10
            padding: 10
            Button:
                text:"ChangeColor1"
                on_release: app.bg_color = [0, 0, 1, 1]  # adjust the bg_color Property of the App
            Button:
                text:"ChangeColor2"
                on_release: app.bg_color = [0, 1, 0, 1]  # adjust the bg_color Property of the App

<Screen2>:
    name: "Screen2"
    BoxLayout:
        orientation:"vertical"
        spacing: 10
        padding: 10
        Label:
            text: "Test2"
        Button:
            text:"Next Screen"
            on_press: root.manager.current = 'Screen3'
        

<Screen3>:
    name: "Screen3"
    BoxLayout:
        orientation:"vertical"
        spacing: 10
        padding: 10
        Label:
            text: "Test3"
        Button:
            text:"Next Screen"
            on_press: root.manager.current = 'Screen1'
:
颜色:1,1,1,1
背景\u正常:“”
背景颜色:app.bg\u颜色#引用应用程序的bg\u颜色属性
:
屏幕1:
屏幕2:
屏幕3:
:
名称:“屏幕1”
盒子布局:
方向:“垂直”
间距:10
填充:10
标签:
文本:“测试”
按钮:
文本:“下一屏幕”
按:root.manager.current='Screen2'
盒子布局:
方向:“水平”
间距:10
填充:10
按钮:
文本:“ChangeColor1”
发布时:app.bg_color=[0,0,1,1]#调整应用程序的bg_color属性
按钮:
文本:“ChangeColor2”
发布时:app.bg_color=[0,1,0,1]#调整应用程序的bg_color属性
:
名称:“屏幕2”
盒子布局:
方向:“垂直”
间距:10
填充:10
标签:
文本:“Test2”
按钮:
文本:“下一屏幕”
按:root.manager.current='Screen3'
:
名称:“屏幕3”
盒子布局:
方向:“垂直”
间距:10
填充:10
标签:
文本:“Test3”
按钮:
文本:“下一屏幕”
按:root.manager.current='Screen1'

在上面的
kv
代码中,
bg\U color
属性在
规则中被引用,并由
ChangeColor
按钮修改。

非常感谢,这非常有效!如果有人出现在这篇文章中并且需要知道,我会留下我所做的来添加更多的颜色。我所要做的就是在应用类TestApp(app)中创建更多的ListProperties:bg_color=ListProperty([1,0.275,0.333,1])color2=ListProperty([0,0,1,1]),在kv文件中编写“on_release:app.bg_color=app.color2”,甚至不需要函数,也可以用于标签。