Kivymd:通过按下按钮更改工具栏背景颜色

Kivymd: change toolbar backgroud color by pressing a button

我想知道是否可以通过按下按钮来更改工具栏背景颜色。我有 6 个不同颜色的按钮,当我按下它时,工具栏背景会改变它的颜色...

我尝试更改创建方法,但是 returns 出错...

def changeThemeColor(self):
        self.root.ids.tbCategorie.md_bg_color = [0, 0, 0, 1]

下面是我的代码。

from kivymd.app import MDApp
from kivymd.uix.floatlayout import FloatLayout
from kivy.lang import Builder
from kivymd.uix.button import MDFlatButton
from kivy.uix.scrollview import ScrollView

KV = '''
ScreenManager:
    Screen:
        name: 'screenOption'
        BoxLayout:
            orientation: 'vertical'
            MDToolbar:
                id: tbOption
                md_bg_color: 0, 0, 0, 1
            Options:
                id: screenoption

<Options>
    ScrollView:
        MDList:
            spacing: '20dp'
            padding: '25dp'
            
            MDLabel:    
            BoxLayout:
                MDFlatButton:
                    md_bg_color: (0/255,0/255,0/255)
                    on_release: app.changeThemeColor()
                    line_color: (128/255,128/255,128/255)
                
                MDLabel:        
                MDFlatButton:
                    md_bg_color: (255/255,255/255,255/255)
                    line_color: (128/255,128/255,128/255)
                
                MDLabel:    
                MDFlatButton:
                    md_bg_color: (255/255,0/255,0/255)
                    line_color: (128/255,128/255,128/255)
                
                MDLabel:
                MDFlatButton:
                    md_bg_color: (0/255,0/255,255/255)
                    line_color: (128/255,128/255,128/255)
            
            MDLabel:
            BoxLayout:
                MDFlatButton:
                    md_bg_color: (255/255,0/255,255/255)
                    line_color: (128/255,128/255,128/255)
                
                MDLabel:
                MDFlatButton:
                    md_bg_color: (255/255,255/255,0/255)
                    line_color: (128/255,128/255,128/255)
                
                MDLabel:
                MDFlatButton:
                    md_bg_color: (0/255,128/255,0/255)
                    line_color: (128/255,128/255,128/255)
                    
                MDLabel:
                MDFlatButton:
                    md_bg_color: (128/255,128/255,128/255)
                    line_color: (128/255,128/255,128/255)
'''

class Options(FloatLayout):
    pass
    
class Aplicativo(MDApp):
    
    def changeThemeColor(self):
        self.root.ids.tbCategorie.md_bg_color = [0, 0, 0, 1]
    
    def build(self):
        return Builder.load_string(KV)
        
Aplicativo().run()

顺便说一句,原始代码我至少有 5 个不同的工具栏我想更改。

在您发布的代码中,tbOption 指的是 MDToolbartbCategorie 没有任何参考。因此,在方法 changeThemeColor 中,您需要将其更改为

self.root.ids.tbOption.md_bg_color = [0, 0, 0, 1]

此外,您在设置 md_bg_color

时可能会遇到以下错误
ValueError: MDToolbar.md_bg_color value length is immutable`

这意味着 md_bg_color 应该是 四个 值的列表或元组(如果以这种格式给出而不是字符串,None 等) [r, g, b, a] 格式中的 0 和 1 之间。