0

クリックしたときにタッチイベントからの情報、つまりマウスの位置とクリックに使用されるマウスボタンを使用するボタンウィジェットをKivyで作成したいと考えています。

私が再実装するon_releaseon_press、このようにすると:

from kivy.uix.button import Button

class myBtn(Button):
    def on_release(touch=None):
        print('Touch:', touch) # Touch: None (always)

Touch は常に None になります。再実装するon_touch_upon_touch_down、タッチ情報にアクセスできる場合:

from kivy.uix.button import Button

class myBtn(Button):
    def on_touch_up(touch=None):
        print('Touch:', touch)
        # Touch: <MouseMotionEvent spos=(..., ...) pos=(..., ...)

        print('Button:', touch.button) # Button: left

このバージョンの問題は、マウス ボタンを離した後も、ボタンのプレス/リリース アニメーションが押されたように残ることです。また、関数が 1 回だけではなく 2 回呼び出されます。

関数で同じことを行うとon_touch_down、関数は 1 回だけ実行されますが、クリックしてもボタンのアニメーションはまったく変化しません。

on_touch_downとで見つかった問題を回避して、MouseMotionEvent を回復するにはどうすればよいon_touch_upですか?

4

1 に答える 1

0

使用したい場合、on_releaseまたはon_press次のようにアクセスできる場合MouseMotionEvent:

from kivy.uix.button import Button

class myBtn(Button):
    def on_release():
        print('Touch:', self.last_touch)
        print('Button:', self.last_touch.button)

使用したい場合、on_touch_downまたはon_touch_upsuper() 実装を確実に呼び出す必要がある場合:

from kivy.uix.button import Button

class myBtn(Button):
    def on_touch_up(touch):
        print('Touch:', touch)
        print('Button:', touch.button)    
        super(myBtn, self).on_touch_up(touch) 

ただし、それでも複数回実行されます。

于 2015-08-11T18:48:07.517 に答える