mirror of https://github.com/kivy/kivy.git
Page:
GestureBox
Pages
A draggable scrollbar using a slider
AdBuddiz Android advertisements integration for Kivy apps
Advanced Graphics: In Progress
An example of background Twisted server running on Android
Android Background Services
Android SDK NDK Information
Android SDK NDK Informations
Android native embedded browser
Android style menu app skeleton
Background Service using P4A android.service
Batch installer for windows(KivyInstaller)
Breaking changes in Kivy
Building Portable Package
Button(s) in settings panel
Buttons in Settings panel
Community Guidelines
Connecting Kivy with Anaconda (OSX)
Contextual Menus
Contextual menus
Control alpha of all the children
Create source distribution release on PyPI
Creating a Release APK
Data driven variables with kivy properties
Debugging widget sizes
Deep Linking with iOS and Android
Delayed Work using Clock
Drag and Drop Widgets
Dragable Widget
Draggable Scalable Button
Editable ComboBox
Editable Label
Embedding a Carousel inside a TabbedPanel
GestureBox
Home
Implementing Android Adaptive Icons
KEP001: Instantiate things other than widgets from kv
Kivy 2.0 api breaks
Kivy Blogs and Blog Posts
Kivy Python 2 Support Timeline
Kivy Technical FAQ
Kv language preprocessing
Linking ScreenManager to a different Widget
List of Kivy Projects
Markup Summary
Menu on long touch
Migration guide from legacy garden packages
Moving kivy.garden.xxx to kivy_garden.xxx and kivy.deps.xxx to kivy_deps.xxx
On touch current widget
On touch on current widget
Packaging Kivy apps written in Python 3, targeting Windows using Nuitka
Pyjnius Vibrator Example
Release Checklist
Release notes for 1.10.0
Release notes for 1.11.0
Sample Gestures
Scaler for Retina screen
Scollable Options in Settings panel
Scrollable Label
Setting Up Kivy with various popular IDE's
Setting up Pycharm on OSX (older versions)
Setting up garden with Mac Ports
Setting up kivy with various popular IDE
Simple slider with value in label
Snippet template
Snippets awaiting moderation
Snippets
Starting Kivy App and Service on bootup on Android
Styling a Spinner and SpinnerOption in KV
Talks and tutorials
Theming Kivy
Tiled Maps & Tile Based Movement
Tiling the background of a widget with an image, pixel perfect
Ubuntu Touch
Updating widget content from a items list
User Snippets
Using Asynchronous programming inside a Kivy application
Using Buildozer on windows 10 using WSL
Viewport with fixed resolution autofit to window
Windows RT
Working with Python threads inside a Kivy application
rand0m app
wiki_proposed
1
GestureBox
panthertrader edited this page 2017-05-04 15:07:55 +02:00
Table of Contents
A Sample how to use Gestures in Kivy
from kivy.app import App
from kivy.event import EventDispatcher
from kivy.lang import Builder
from kivy.gesture import Gesture, GestureDatabase
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivy.graphics.vertex_instructions import Line
# execute gesturebox of kivy examples for more gestures:
#/usr/share/kivy-examples/gestures
gesture_strings={
"left_to_right_line":'eNq1l0tu2zAQhve8SLypwXlxOBdwtwVygMJJBMdIawu20za373CSpg9UljbMIoqpnx8pfsPIXO2f9t9e1rvhfHk+Denj23XMafUwQrq9OWy/DjdpRP/TL5TOtzfny+n4NJz9I6fVl1HS6r+Q24ilsTSUev/xuD9cWrfautlEt08tlUZ4nUGbwot3AUybD3mdM2UoYoACtQqJtQn9aAGKALOxYrYilA3Mb99tr4/DMY6kXRuijZCdTRVLZkLOGUzSefcLD363vP/21ll+PD7oMj6RZPNHBCn+bKbz+Bp464THsICwDI9qQspScq6Z2Zd2lo/Bp278sIsL7QIjVhTh7DUkVhesT9hF7cYPvWi9+BR+Cbrxwy8t9JuLAhiI72v2jYzzu4vCL0k3fvgl7cYPv7TEr98EluotkCWrmu+DWT6HX4Zu/PDLtIiPQn9WEM+XD4dell74sMvaCx9y2TrhJdwK9MKHWumlVkKt9FIroVZ6qZVQK8vUEoIWU3/5EjPZ/K4qYbZAJ3qILcvEsgoVFl8VLVisztPDa5FO9NBatBM9rBbrQ9ewqtCJHlZ1mVUBIEAvHPD/8prn31MaVnWZVZEs/lUtExfLMfN2aLg/DcPh/QigpZ0BVNNqgyDrnDZewH65jFrTtjXqa2NpY/3+KS1hkcDpRM2RkDydgEiUKwxsCT9FTCcoEoTTCY6EXBlFWoLpykxLJASmExoJq//emojHAsu1B4sFFpwe0nyBX70+Dvvd48WNGqQN/J0U31Ae+b5/uDy2hJcOZae1xsvxy3DaHu7b4dKibKA1v5Xf5/F0fHi+Dy57r7UXGvqJjyv6qUv8tXG+W/8EE0/L+Q=='
,'right_to_left_line': 'eNq1l01u2zAQRve8SLyJMP8kL5BuC+QAhZsIjpHWFmylbW5fcuQGFtpE6oLaWP7MeST9aJra7J/3P167XX8eX059+HR5HSBsHgcM9zeH7ff+JgxUbssLh/P9zXk8HZ/7c3krYfNt0LD5J+Tem4XBKiqW+uG4P4y1LNWy/E7Z59oqDDiNoA7htZQghTvqiEDEQDIpMHJ/i1YH9Ks24HAHnURhRBGwGLMZxXD+uv24H/F+NOw+6GJ3oYMpSmJQSKWnvAz3uWNsA08Oz2vgHMnQlFSo3JYWi3Ty759wFV0oq07j1mhqy3RyOq+hkyaC7GSKiFmW6e6UtBHdpdIqqYSa2JJdVmRa8b27Vcpt6OxWeZVVSEDCf+AWaZnuVpkb0d0qayO6W+XYiO5WeZVVgP9dkeJWBRvR3aqssHoLHbImTfC2FyzT3apoI7pbldiI7lYlt6GrW1VsRHerus5qWSmiWNeLbzbL+4y6VdVGdLeqsRHdrWpuQze3auusMisgaObSijnjMt2tGjeiu1VbZ5UzQFbmlKczzTLdrVpsRHerts5q+Q0lQQS0LBmXpUaXGrEN3J1GbgN3pXGdUskGFKczZEo4na7rA8HDqe8Pb8f7svuU832MYXNnEjso3FT+eMI4xBS2NbRZmD1kvA4TeEg8C9FDnJUnqqHmecgepnkoHqrMQvWQZ+NM5iHMe481lDgfp89IVLt8fclVC5+eyIyVfXpSp3d92VULn6tgmpXRFOL7ZWXik5Snfr97GouOOpj6Ycl+7h/HpxppqeC/xlxajMdv/Wl7eKjPfNlqIdb4sni+DKfj48uDU2NdLhmoHPdT2UmorLv6zNL9BloawHs='
,'top_to_bottom_line': 'eNq1l0tu2zAQhve6SLyJMS9yOBdItwVygCJNhMRomwi2+7p9hyNVptq0BSrIGyW/yY/ifBRN7Q4fDl++7x/70/nzse/eTNcBut3DgN3t1fPdp/6qG8j/9At3p9ur0/n48qE/+b/S7T4Oqdu9CrmNZt2QK0q9//ByeD7XbqV2sz90e1tbdQOOd1Bv4bt3QepuYJ8JzRhJUVRzsno33+q3XL8FKFmyGCY0LZoNu9P7u7+PIjFK6h7HAVLKCggMRlpYcnd6/H92TBx1E3YJtv1kS+IMhUSFKBdw7gi/rnTM2UfMhUFJlfM/6RS1J9yITkHnjehhlGajI1SQWBGZ80p6OKXZKaMlN0al+GpUW3vvYZVsGzqHVcaN6GGVZ6tUEpHX25ezJhN/xFbRwyrPVgkZUhE0Erbi/HX0sMq6ET2ssm1Dl7Aqs1UsC76spIdVma0i5ERGYLETk66zKmFV0kb0sCqzVchFm1WZaB09rMpk9Zr2RCCSQYwSMHJ/jXnVACnEJtxugHCbJreV0Vaf/YdrFT3cprQRPdwmnenIKklrgZSTP1br6OE22Tb0HGIzbkQPq/liFb1zkaKmvm5KXrfqc1jNF6vtHp/A95x1+NCadSt8eM0XrwwkkMQKFfST1zq6hlfFjejhVS9eGbMfGAlI/eTo55t19PCqF68sCmrAWqDum//caeprwf2x75/nQ7738VO+are74Ux76G5coF/Og5burglhDK0JxSTCAm1YaAyxDTWNIUWYLMI0teQ2FB5DaUOcwtSGMIW5Cfnn6NqGSntrP1JblLZFGudcrA1lnLNBG9IUYhtOJbN2elSmlu30/J1oDNvpUfLqtB+uLdq5kthyBlpbtBMnplcYbRWIyjh0WYT5lW62aDFWFAEWKfx+Qwj4S5Pf0AiLEqFN7EWNME/pokgor42YfmkydlxUBnFKF9VAmFIvx/hkPPWHx6dzfU8F8wZWu3n89fBwfqopVtNjdn752B/vnu/7yDFORTWfHtt3w/Hl4fN9sOqT6svPT3rieztY3RD8hHx6v/8BCAwPRg=='
,'bottom_to_top_line': 'eNq1l8GO2jAQhu9+EbgU2R6Px/MC9FqJB6goRCzaLUSQbbtvX3scJfYuXSoh+xJifn+e+DMhWR6fj7/eVofuOrxeOvV1PPZaLfe9UZvFafuzW6jexo/xAOq6WVyHy/m5u8ZTp5YvParlTchGYqr3CUVxfH8+noY0LKRh/I9h31JK9SZXkEp4i0OMVesveoVkqpbK+ZO+BvlaG6ctzQ3V9cf282mcTIPqMM7gGHw9w2GCGyzgQcN9uly7oUb0IHSe6aam40N4KwasaYW3godWeBFrZ7HgK7p+EC9m7WwW6uofg4tYy03gIFph1mqw+knp8BhetAK0wotWwFZ40QrUCi9igRvhnah1s1rNodg38ewxvKh10Aovat2oNiIw1O0xuph11IguYh23oaN4RdOILloRGtHFKk5WDULJZl/QtS/pbO7DRSpSG7g4RW4C96LUT0qtNiWdy38nXS06cdzKd/Hi1E9ObVV6YBjxiQ6O7NQ08324KPWTUtA1fGbHe0LBNv4/1kWMemrCFqGeW7BJfNLkE8DDrc2S4FjCLd23SWKTJpsQSnhRt63rpvtkUUmTSmerbUifo9O7wO7SdafpyT5eTHy0J1LLtdOw0mqNfsVlC14NPQW1TQmXEt7VCUoBLgKBPgaCLgLG8I2EKRPA8RA7bdnp0/YvGqQEFAlrMQ9zZafzN4ZhkQA9zuZzJ9bVuZhwlBOUE0GGeZ87x9Xhj8OCyYm8PEZW2I2zcV4Sg3V1Piaszom8JIZkmNPvgzFhywTC+wpiAqpEXh92VWe+tngP2+ZN8tQdD09D3B6citGpmNj7+7gfnlInRRUu9w3nl+6yPe3SK2d8nEh33dQ9bt7v/eW8f90JiaOIFWkKhuMflneGCdPr3uovChLZTw=='
}
gestures = GestureDatabase()
for name, gesture_string in gesture_strings.items():
gesture = gestures.str_to_gesture(gesture_string)
gesture.name = name
gestures.add_gesture(gesture)
root = Builder.load_string('''
FloatLayout:
''')
class GestureBox(Widget):
def __init__(self,**kwargs):
for name,gst_string in gesture_strings.items():
self.register_event_type("on_{}".format(name))
super(GestureBox,self).__init__(**kwargs)
def on_left_to_right_line(self):
print("left to right gesture occured" )
pass
def on_right_to_left_line(self):
print("right to left occured")
pass
def on_top_to_bottom_line(self):
pass
def on_bottom_to_top_line(self):
pass
def on_touch_down(self, touch):
touch.ud['gesture_line'] = Line(points=(touch.x, touch.y))
super (GestureBox, self).on_touch_down(touch)
def on_touch_move(self, touch):
touch.ud['gesture_line'].points += [touch.x, touch.y]
super(GestureBox, self).on_touch_move(touch)
def on_touch_up(self, touch):
if "gesture_line" in touch.ud:
gesture = Gesture()
gesture.add_stroke(zip(touch.ud['gesture_line'].points[::2],
touch.ud['gesture_line'].points[1::2]))
gesture.normalize()
match = gestures.find(gesture, minscore=0.9)
if match:
self.dispatch('on_{}'.format(match[1].name))
else:
pass
#print("No gesture recognized")
super(GestureBox, self).on_touch_up(touch)
# compare the gestures
class MainApp(App):
def build(self):
return GestureBox()
if __name__ == '__main__':
MainApp().run()