尝试与ScrollView中的对象进行交互时,是否有一种方法可以解决滞后问题

时间:2019-05-13 19:33:53

标签: python-3.x kivy

我需要一组图像将复制的屏幕外图像带到鼠标位置并可以拖动。

编辑***我发现滞后来自将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

0 个答案:

没有答案