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