Есть ли способ обойти лаги при попытке взаимодействия с объектами в ScrollView - PullRequest
0 голосов
/ 13 мая 2019

Мне нужно, чтобы набор изображений выводил реплицированное закадровое изображение в положение мыши и было перетаскиваемым.

Отредактировано *** Я обнаружил, что лаги возникли из-за размещения GridLayout в Scrollview.К сожалению, мне нужно использовать вложенный макет в Scrollview для моего приложения.Есть ли причина, по которой это происходит?

Отредактированный код

class IconMenuItem(Image):
    def on_touch_down(self,touch):
        if(self.collide_point(touch.x, touch.y)):
            self.update_touch_image(self.id, touch)
            touch.grab(self)
            return True
    def on_touch_move(self, touch):
        if touch.grab_current is not self:
            return
        self.update_touch_image(self.id, touch)

    def on_touch_up(self, touch):
        if touch.grab_current is not self:
            return
        touch.ungrab(self)
        self.return_image(self.source)

    def return_image(self,source):
        drag_icons=self.parent.parent.parent.parent.draggable_icons
        for icon in drag_icons:
            if(icon.source==source):
                icon.center=self.to_window(-1000,-1000)
                return

    def update_touch_image(self, id, touch):
        drag_icons=self.parent.parent.parent.parent.draggable_icons
        for icon in drag_icons:
            if(id==icon.id):
                icon.center=self.to_window(touch.x, touch.y)
                return
class MainScreen(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.load_icon_menu()

    def load_icon_menu(self):
        #print(self.children)
        self.draggable_icons=[]
        icon_gates=["id", "x", "y", "z", "h", "s", "t", "u", "barrier", "measure", "c", "dagger", "Debug"]
        for i in range(len(icon_gates)):
            icon=IconMenuItem(source = "images/" + icon_gates[i] + "_icon.png", allow_stretch=True, id=str(i))
            self.ids['icon_menu'].add_widget(icon)
            drag_icon=Image(source= "images/" + icon_gates[i] + "_icon.png", pos=(-1000, -1000), id=str(i))
            self.draggable_icons.append(drag_icon)
            self.ids['main_screen'].add_widget(drag_icon)

class RootWidget(ScreenManager):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.add_widget(MainScreen(name= 'screen'))


class EXApp(App):
    pass


if __name__ == "__main__":
    EXApp().run()

ex.kv

RootWidget:


<MainScreen>:
    id:screen
    FloatLayout:
        id: main_screen
        pos_hint:  {'x': 0, 'y': 0}
        canvas:
            Color:
                rgba:.7,.5,.7,0.3
            Rectangle:
                size: self.size

        ScrollView:
            size_hint: 0.25, 0.7/5*5
            pos_hint:{'x': 0.7, 'y': 0.2}       

            GridLayout:
                id: icon_menu
                cols: 3
                rows: 5
                padding: 10
                spacing: 10
                canvas:
                    Color:
                        rgba:0,0,1,0.3
                    Rectangle:
                        pos: self.pos
                    size: self.size
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...