python - 在 kivy 中,是否可以更改微调器中子元素的颜色?
问题描述
我正在用 kivy 做一个小应用程序。在我选择了微调器中的一个元素后,我不希望它在下一轮看起来相同,以便用户知道为此值输入了一个值。我想改变它的颜色。只为这个元素。是否可以?
.kv 文件
Spinner:
id: sliderComponents
visible: False
opacity: 1 if self.visible else 0
disabled: not self.visible
text: "<Component...>"
values: ("Component A", "Component B", "Component C", "Component D", "Component E", "Component F", "Component G", "Component H", "Component I")
pos_hint: {'x': 0.5, 'y': 0.5}
因此,如果我选择“组件 B”,我希望它具有不同的颜色。只是“组件B”
谢谢!
解决方案
是的,有可能。
- 实现类型的动态类或类规则
SpinnerOption
- 按下或释放按钮时将更改为
background_color
您想要的颜色(使用按钮on_press
或on_release
事件)
片段 - kv 文件
<CustomSpinnerOptions@SpinnerOption>:
background_normal: ''
background_color: 0, 0, 1, 1 # blue
on_release:
self.background_color=1, 1, 0, 1 # yellow
例子
以下示例使用 kv 文件和 Python 脚本。
主文件
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
Builder.load_string("""
#:import Factory kivy.factory.Factory
<CustomSpinnerOptions@SpinnerOption>:
background_normal: ''
background_color: 0, 0, 1, 1 # blue
on_release:
self.background_color=1, 1, 0, 1 # yellow
<CustomDropdown@DropDown>:
max_height: 300
bar_width: 5
bar_color: 0, 1, 0, 1 # green
bar_inactive_color: 1, 0, 0, 1 # red
effect_cls: 'ScrollEffect'
scroll_type: ['bars', 'content']
<CustomSpinner@Spinner>:
canvas.before:
Color:
rgba: 1, 1, 1, 1
Rectangle:
size: self.size
pos: self.pos
background_normal: ''
background_color: 1, 1, 1, 1 # white
color: 0, 0, 0, 1
text: '<Component...>'
values: [ "Component A", "Component B", "Component C", "Component D", "Component E", "Component F", "Component G", "Component H", "Component I" ]
size_hint: (None, None)
size: 200, 48
sync_height: True
pos_hint: {'center_x': .5, 'center_y': .5}
on_text:
app.root.show_selected_value(self, self.text)
dropdown_cls: Factory.CustomDropdown
option_cls: Factory.CustomSpinnerOptions
<RootWidget>:
cols: 1
CustomSpinner:
""")
class RootWidget(GridLayout):
def show_selected_value(self, spinner, text):
print('The spinner', spinner, 'have text', text)
class SpinnerDemoApp(App):
title = 'Spinner Demo - Change selected button colour'
def build(self):
return RootWidget()
if __name__ == "__main__":
SpinnerDemoApp().run()
输出
推荐阅读
- c# - C# 应用程序 - 视频流未在第一次尝试时开始
- python - 我不断得到
从请求中,我如何获取内容? - azure - 如何从命令行使用 .NET 5.0 配置 Azure VM?
- jsf - Joinfaces 支持 JSF Primefaces 10
- python - Tor 活动链接状态检查器
- mysql - 如何解决连接过多
- geckodriver - Geckodriver Selenium/Java 无法在 macOS Big Sur 上运行
- azure - 在 signin_signup 自定义策略中 EnforceIdTokenHintOnLogout="true" 时出现 Azure AD B2C 错误“未指定 id_token_hint 参数”
- android - 为什么我不能使用 asyncTask
- python - 如何在角图中以不同方式格式化中位数和误差?