我是Kivy的新手。我想要一个图像在按下(触摸)时变成另一个图像。 应该有一些简单的方法来做到这一点,但我无法弄清楚是什么。
<Game>
Image:
id: "11"
center_x: root.width / 2 - root.height * 1/5 * 1.5
center_y: root.height * 1/5
size: root.height / 6, root.height / 6
source: root.images[0]
这是我的代码的一部分。我不知道如何使我的形象“可压缩”。它必须是某种按钮吗?
答案 0 :(得分:2)
我相信你能做到这一点的最好方法是使用你的kv文件中动态创建的动态类 http://kivy.org/docs/api-kivy.lang.html#dynamic-classes
<ImageButton@ButtonBehavior+Image>:
on_press: self.parent.callback()
# this class is created on the fly, named ImageButton and subclasses ButtonBehavior and Image
# It's basically an Image that can act like a Button.
<Game>
ImageButton:
id: "11"
center_x: root.width / 2 - root.height * 1/5 * 1.5
center_y: root.height * 1/5
size: root.height / 6, root.height / 6
source: root.images[0]
callback()
是Game
中改变图像来源的方法。
内部Game
类:
def callback(self, instance, value):
self.ids['11'].source = new_source
# or you could switch sources each click for instance
或类似的东西(看这里:http://kivy.org/docs/api-kivy.uix.widget.html#kivy.uix.widget.Widget.ids)
答案 1 :(得分:2)
不,它不一定是一个按钮。在不添加任何额外对象的情况下,您还可以使用窗口小部件类的on_touch_down事件(它也恰好是Image的基类)。
<Game>
Image:
id: "11"
center_x: root.width / 2 - root.height * 1/5 * 1.5
center_y: root.height * 1/5
size: root.height / 6, root.height / 6
source: root.images[0]
on_touch_down: root.image_press(*args)
args包含事件的额外参数:http://kivy.org/docs/api-kivy.uix.widget.html?highlight=on_touch_down#kivy.uix.widget.Widget.on_touch_down。在这里,我假设您的处理程序名为image_press并添加到Game类中。
在开始这条道路之前,请考虑您的目标是否由预定义的类完成,例如按照建议修改按钮的背景属性。如果您还想要kivy开发人员已经内置的其他一些复杂行为,那么从长远来看,这可能会更加简单。