我目前正在使用Kivy和Python编写一些代码。我试图这样做,当你点击按钮时,按钮的文字会改变颜色。
然而,当我点击按钮时,颜色并不像我想要的那样。
任何想法如何解决这个问题?我只是在学习Kivy,也许答案比我想象的要容易。 .py文件位于
之下from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.uix.button import Button
from kivy.graphics import Color
class TextBubbleSample(Widget):
bubble = ObjectProperty(None)
class TextBubble(Widget):
pass
class Talk(Button):
btn = Button
def button_press(self):
btn.bind(on_state = self.on_event)
def on_event(self):
btn.color = 1,0,0,1
class TextBubbleApp(App):
def build(self):
return TextBubbleSample()
if __name__ == '__main__':
TextBubbleApp().run()
and here is the .kv file
#:kivy 1.0.9
<TextBubbleSample>:
bubble: text_bubble
btn: click_here
TextBubble:
id: text_bubble
x: root.x
center_y: root.center_y
Talk:
id: click_here
x: 10
center_y: 220
text: "Talk to me."
color: 0,0,1,1
<TextBubble>:
canvas:
Color:
rgba: 1,0,0,1
Rectangle:
pos: 10, 10
size: 780, 150
Label:
color: 0,0,1,1
font_size: 35
center_x: 200
top: root.top - 200
text: "I am talking"
答案 0 :(得分:1)
您不应该/不能像这样使用变量btn
。使用self.bind(on_state=self.on_event)
然后self.color = (1, 0, 0, 1)
。
答案 1 :(得分:0)
您应该尝试缩短代码长度,在这种情况下您不需要使用任何ID。
可能有一个简单的替代方案来解决这个问题。 在.py文件(Talk类)中添加。
class Talk(Button):
....
def on_release(self):
self.color = 1,0,0,1
并在.kv文件中添加
Talk:
text: "talk to me"
....
on_release: self.on_release
修改强>
你也可以这样做
class Singularity(BoxLayout):
def __init__(self,**kwargs):
super(Singularity,self).__init__(**kwargs)
self.b = Button(text = "hello",on_press = self.on_press)
self.add_widget(self.b)
def on_press(self,event):
if event.color == [1,0,0,1]:
event.color = [0,0,1,1]
else:
event.color=[1,0,0,1]