ScatterLayout - do_translation non funziona
Nov 03 2020
Il mio codice
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()
La posizione del pulsante e dell'immagine è secondo le mie esigenze. Ma ho definito do_translation= True for MyScattere non funziona.
Risposte
xralf Nov 03 2020 at 03:24
Mi sono ispirato qui e ho scritto questo codice:
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()
Sembra funzionare. Per favore, fammi sapere se è una buona soluzione.