2014-11-08 3 views
1

Я новичок в Kivy. Я хочу, чтобы изображение менялось на другое, когда оно нажато (коснулось). Должен быть какой-то простой способ сделать это, но я не могу понять, что.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

RTM: [Например, если вы хотите добавить функцию «кнопки» к Изображение, вы могли бы сделать ...] (http://kivy.org/docs/api-kivy.uix.behaviors.html) –

ответ

1

Я считаю, что лучший способ вы могли бы сделать это, использует динамический класс, созданный на лету в файле кв http://kivy.org/docs/api-kivy.lang.html#dynamic-classes

<[email protected]+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)

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) 

В арг содержит дополнительный параметр для события: http://kivy.org/docs/api-kivy.uix.widget.html?highlight=on_touch_down#kivy.uix.widget.Widget.on_touch_down. Здесь я предполагаю, что ваш обработчик назван image_press и добавлен в класс Game.

Прежде чем начать эту дорогу, рассмотрите, будет ли ваша цель выполняться предопределенными классами, например. изменяя свойство фона кнопки, как вы предложили. Вероятно, это будет намного проще в долгосрочной перспективе, если вы также хотите, чтобы некоторые другие сложные поведения, которые разработчики kivy уже встроили.

+0

это ответ на вопрос? – tiktok