Пара проблем.
Сначала ваш метод change_color()
пытается изменить back_color
в вашем Type
экземпляре, но ваше правило RoundedButton
ссылается на back_color
в вашем RoundedButton
экземпляр (не тот, что в Type
). Поэтому любые изменения, которые вносит метод, не влияют на RoundedButton
.
Во-вторых, оператор if
:
if self.back_color == (0.2,0.6,1,1):
никогда не будет истинным. Частично из-за первой проблемы, но и сравнение должно быть:
if self.back_color == [0.2,0.6,1,1]:
Я не уверен, почему это так.
Я думаю, что самый простой способ решить первую проблему - эточтобы добавить id
к RoundedButton
:
<Type>:
name: "type"
RoundedButton:
id: butt
size_hint: 0.417, 0.15625
pos_hint: {"x": 0.0556, "y": 0.15}
on_press: root.change_color()
Затем измените метод change_color()
на:
class Type(Screen):
def change_color(self):
if self.ids.butt.back_color == [0.2,0.6,1,1]:
self.ids.butt.back_color = (0, 1, 0, 1)
else:
self.ids.butt.back_color = (0.2,0.6,1,1)
Обратите внимание, что back_color
ObjectProperty
неНеобходимый.
Если вы хотите, чтобы RoundedButtons
независимо менял цвет, вы можете определить RoundedButton
как:
class RoundedButton(Button):
back_color = ListProperty()
def change_color(self):
if self.back_color == [0.2,0.6,1,1]:
self.back_color = [0, 1, 0, 1]
else:
self.back_color = [0.2,0.6,1,1]
И в своем файле kv
:
<Type>:
name: "type"
RoundedButton:
size_hint: 0.417, 0.15625
pos_hint: {"x": 0.0556, "y": 0.15}
Image:
source: 'Job.PNG'
size: self.parent.width, .85 * self.parent.height
pos: self.parent.x, self.parent.y + 5
stretch: True
keep_ratio: False
RoundedButton:
size_hint: 0.417, 0.15625
pos_hint: {"right": 1, "top": 1}
Image:
source: 'Job.PNG'
size: self.parent.width, .85 * self.parent.height
pos: self.parent.x, self.parent.y + 5
stretch: True
keep_ratio: False
<RoundedButton>:
background_normal: ""
background_color: 0, 0, 0, 0
back_color: 0.2,0.6,1,1
border_radius: 10
color: self.back_color
bold: True
on_press: self.change_color()
canvas.before:
Color:
rgba: self.back_color
Line:
rounded_rectangle: self.x, self.y, self.width, self.height, self.border_radius