私はクリック可能な画像を作成しました。回転できますが、回転の原点を取得することはできません。次のコードでは、2つのイメージ(その1つはクリック可能)をフォームに配置します。クリック可能なものを回転させて、それらを互いの上に置くことを期待しています。クリック可能なものは回転しますが、回転中心はイメージセンター以外のものになります。中心を指定していても、その中心が移動します。興味深いことに、それはクリック可能ですが、クリック領域はそれが想定されているところです:クリック不可能な画像上。つまり、青いイメージをクリックすると、赤いイメージが緑色に変わります!Kivy:クリック可能な画像を回転
私はオンラインで見つかったいくつかのkv言語からこのコードを修正しました。しかし、ボタンをプログラムで設定する必要があります。なぜなら、最終的には、それぞれが回転して別々に動かされるフォームがたくさんあるからです。
私は問題が座標単位の不一致であるように感じますが、私は多くのオンラインとドキュメントを見つけていません。どんな助けもありがとうございます。画像はちょうど32x32のアイコンで、あなたが手軽に持っているものに置き換えることができます。あなたのウィジェット(非常に便利なデバッグ手法)の周りに線を描画しようとした場合
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.image import Image
from kivy.uix.floatlayout import FloatLayout
from kivy.graphics.context_instructions import PopMatrix, PushMatrix
from kivy.graphics import Rotate
from kivy.uix.behaviors import ButtonBehavior
h = .05
w = h * 1.6
class IconButton(ButtonBehavior, Image):
def __init__(self, angle=0, **kwargs):
super(IconButton, self).__init__(**kwargs)
self.canvas.before.add(PushMatrix())
self.canvas.before.add(Rotate(angle = angle, origin = [self.get_center_x(), self.get_center_y()]))
self.canvas.after.add(PopMatrix())
def on_press(event):
event.source = event.img_dn
print '{} pressed'.format(event.id)
def on_release(event):
event.source = event.img_up
print '{} released'.format(event.id)
class TestApp(App):
def build(self):
layout = FloatLayout()
btn = IconButton(angle=-20, id='b1', size_hint=(h,w), pos_hint = {'center_x': .25, 'center_y': .9})
btn.img_up = 'loudspeaker_red_32.png'
btn.img_dn = 'loudspeaker_green_32.png'
btn.source = btn.img_up
layout.add_widget(btn)
im = Image(id='i1', size_hint=(h,w), pos_hint = {'center_x': .25, 'center_y': .9})
im.source = 'loudspeaker_blue_32.png'
layout.add_widget(im)
return layout
class MainApp(App):
def build(self):
layout = Builder.load_string(src)
return layout
if __name__ == '__main__':
TestApp().run()
ありがとうございます。あなたの答えは理にかなっていて、うまくいきます。 –