Próbuję utworzyć widżet kivy z Scatter, który można dowolnie powiększać, ale po podniesieniu przycisku myszy następuje powrót do najbliższego poziomu powiększenia.Zmodyfikowany widżet rozproszenia kivy nie aktualizuje transformacji
Działa, ale nie aktualizuje powiększenia do następnego kliknięcia. Wydaje mi się, że muszę powiązać pewne wydarzenie tutaj, ale jestem całkiem nowy w kivy i nie mogę tego rozgryźć. Tu jest mój bieżący kod:
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.scatter import Scatter
from kivy.graphics.transformation import Matrix
ZOOM_LEVELS = [0.25, 0.5, 1, 2, 4]
class PPMap(Scatter):
def __init__(self, **kwargs):
super(PPMap, self).__init__(**kwargs)
self.bind(on_touch_up=self.adjust_zoom)
def adjust_zoom(self, *args):
old_zoom = self.scale
new_zoom = min(ZOOM_LEVELS, key=lambda x:abs(x-old_zoom))
self.set_zoom(new_zoom)
def set_zoom(self, zoom):
self.transform.set(array=[[zoom, 0, 0, 0],
[0, zoom, 0, 0],
[0, 0, zoom, 0],
self.transform.tolist()[3]])
class PPApp(App):
def build(self):
pp_map = PPMap(do_rotation=False, scale_min=ZOOM_LEVELS[0], scale_max=ZOOM_LEVELS[-1])
label = Label(text="Hello!", font_size=300, pos=(0, 0))
pp_map.add_widget(label)
return pp_map
if __name__ == "__main__":
PPApp().run()
Obecnie jestem powiększanie przez „gestów”: Kliknij prawym przyciskiem myszy, aby umieścić pierwszy palec, a następnie przeciągnąć lewym przyciskiem myszy (w systemie Linux) –
To jest dokładnie to, co robi się na Linuksie, ale chcę, żeby zmieniło skalę na jeden z moich stałych poziomów powiększenia po zwolnieniu przycisku myszy (zobacz pierwsze zdanie mojego pytania) –
Na moim Ubuntu ten kod działa, ale jeden na dwóch nie może również aktualizować, może to być błąd – MatEhickey