Kivy - 按下后更改按钮的颜色?
Posted
技术标签:
【中文标题】Kivy - 按下后更改按钮的颜色?【英文标题】:Kivy - Change the color of a button after being pressed? 【发布时间】:2019-06-28 17:35:00 【问题描述】:我的应用程序上有两个按钮,它们都是带有白色文本的紫色。按下按钮时,我希望颜色变为深紫色。显然,我缺少一些简单的东西,因为我的代码不像我期望的那样工作。
Button:
background_normal: ''
background_color: utils.get_color_from_hex("#752db5")
text: 'Sign Up'
size_hint: .3, .3
padding: 3, 1
font_name: 'Roboto-Medium'
background_color_down: utils.get_color_from_hex("#5b238d")
【问题讨论】:
按钮颜色是否正确?因为background_color_down
需要image resource。不知道他们对颜色有多挑剔!=图像。但情况可能并非如此。如果是这种情况,您可以执行btn1.bind(state=callback)
并在您的回调函数中处理这些事情。
How to change background color of button on press in kivy?的可能重复
您是否检查过其他问题的已接受答案?您是否收到错误消息?
@Alex_P 我个人认为我的不一样,但我可能是错的。我试图单独在一个 kv 文件中实现这一点
@Torxed 在 kv 文件中没有实现此功能的功能吗?我认为这很简单,不需要任何 python 逻辑。但是是的,当它没有被按下时,它是正确的紫色。我只是想在单击时使其变暗,因为按下时,它是深蓝色
【参考方案1】:
就我个人而言,我最喜欢的做法是在 .py 文件中创建一个名为 LabelButton
的新类,并让它继承 kivy 的 ButtonBehavior
和 Label
类。然后使用LabelButton
的画布完成着色,你仍然可以像任何普通按钮一样使用on_release
功能,因为你继承了ButtonBehavior
。
可以通过一个非常好的技巧来更改画布的背景颜色。看我的例子。
在您的 .py 文件中包含以下代码:
from kivy.uix.button import ButtonBehavior
from kivy.uix.label import Label
class LabelButton(ButtonBehavior, Label):
pass
然后在你的 .kv 文件中你可以引用 LabelButton 类:
LabelButton:
canvas:
Color:
rgb: (1,0,0,1) if self.state == 'normal' else (0,1,0,1) # Color is red if button is not pressed, otherwise color is green
RoundedRectangle:
size: self.size
pos: self.pos
radius: 10,20,30,40 # Play with these if you want smooth corners for your button
text: "I am a LabelButton"
color: (0,0,1,1) # text color is blue
on_release:
print("I have been clicked")
【讨论】:
附注为了使您的标签看起来更像按钮,您可以在文本下划线。为此,您需要将text
更改为text: [u]I am a LabelButton[/u]
,然后确保添加另一个属性markup: True
以使kivy 理解您的[u]
和[/u]
标签。也适用于粗体 ([b] some text [/b]
) 或斜体 ([i] some text [/i]
)
再次感谢埃里克。你永远是一个帮助。也期待视频以上是关于Kivy - 按下后更改按钮的颜色?的主要内容,如果未能解决你的问题,请参考以下文章