ScatterLayout - do_translation no funciona
Nov 03 2020
Mi código
import kivy
from kivy.uix.scatterlayout import ScatterLayout
from kivy.app import App
from kivy.uix.image import Image
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
class MyScatter(ScatterLayout):
def __init__(self, *args, **kwargs):
super(MyScatter, self).__init__(*args, **kwargs)
self.img = Image(source='img.png', keep_ratio=True, center = self.center)
self.add_widget(self.img)
class MainApp(App):
def build(self):
mainbox = FloatLayout()
mainbox.add_widget(Button(text="Prev",
font_size="17dp",
size_hint=(.15, .15),
pos_hint={"left":1,
"center_y":0.5},
))
ms = MyScatter(scale=1, pos_hint={"center_x":0.33, "center_y":0.5}, do_scale = True, do_rotation = False, do_translation = True)
mainbox.add_widget(ms)
return mainbox
root = MainApp()
root.run()
Las posiciones de botón e imagen son según mis necesidades. Pero, definí do_translation= Verdadero para MyScattery no funciona.
Respuestas
xralf Nov 03 2020 at 03:24
Me inspiré aquí y escribí este código:
import kivy
from kivy.uix.scatterlayout import ScatterLayout
from kivy.app import App
from kivy.uix.image import Image
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
class MyScatter(ScatterLayout):
def __init__(self, *args, **kwargs):
super(MyScatter, self).__init__(*args, **kwargs)
self.img = Image(source='img.png', keep_ratio=True, pos_hint={"center_x":0.33, "center_y":0.5})
self.add_widget(self.img)
def on_touch_move(self, touch): #magic time!!!!
res = super(MyScatter, self).on_touch_move(touch)
if res: #Yay do something!
self.img.pos = (self.center_x, self.center_y)
return res
class MainApp(App):
def build(self):
mainbox = FloatLayout()
mainbox.add_widget(Button(text="Prev",
font_size="17dp",
size_hint=(.15, .15),
pos_hint={"left":1,
"center_y":0.5},
))
ms = MyScatter(scale=1, do_scale = True, do_rotation = False, do_translation = True)
mainbox.add_widget(ms)
return mainbox
root = MainApp()
root.run()
Parece funcionar. Por favor, avíseme si es una buena solución.