ScatterLayout - do_translation ไม่ทำงาน

Nov 03 2020

รหัสของฉัน

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()

ตำแหน่งของปุ่มและรูปภาพเป็นไปตามความต้องการของฉัน แต่ฉันกำหนดdo_translation= True สำหรับMyScatterและมันไม่ทำงาน

คำตอบ

xralf Nov 03 2020 at 03:24

ฉันเป็นแรงบันดาลใจที่นี่และเขียนโค้ดนี้:

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()

ดูเหมือนว่าจะได้ผล โปรดแจ้งให้เราทราบหากเป็นทางออกที่ดี