Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在kivy中的另一个小部件下面滚动一个scrollview_Android_Python_Python 3.x_Kivy - Fatal编程技术网

Android 在kivy中的另一个小部件下面滚动一个scrollview

Android 在kivy中的另一个小部件下面滚动一个scrollview,android,python,python-3.x,kivy,Android,Python,Python 3.x,Kivy,我想在kivy中的scrollview gridlayout顶部覆盖一个矩形、按钮和标签,以提供一个带有当前屏幕名称的横幅和导航弹出窗口的按钮。我已经制作了一个gridlayout按钮列表,可以链接到未来的益智应用程序中的小游戏 我想放在顶部的内容在screenmanager.kv中,网格布局在gameslist.kv中 一切都显示在屏幕上。gridlayout垂直滚动。但是,它会在screenmanager.kv的内容上滚动,而不是在它下面滚动。我希望横幅保持可见,漂浮在网格上,始终保持在窗口

我想在kivy中的scrollview gridlayout顶部覆盖一个矩形、按钮和标签,以提供一个带有当前屏幕名称的横幅和导航弹出窗口的按钮。我已经制作了一个gridlayout按钮列表,可以链接到未来的益智应用程序中的小游戏

我想放在顶部的内容在screenmanager.kv中,网格布局在gameslist.kv中

一切都显示在屏幕上。gridlayout垂直滚动。但是,它会在screenmanager.kv的内容上滚动,而不是在它下面滚动。我希望横幅保持可见,漂浮在网格上,始终保持在窗口顶部的同一位置,不管用户在gridlayout中滚动到哪里

screenmanager.kv:

<GamesListScreen>:
    canvas.before:
        Color:
            rgba: 1, 0.6, 0.6, 1
        Rectangle:
            size: self.width, (self.height * 0.15)
            pos: 0, (self.height * 0.85)
    Button:
        color: 1, 1, 1, 0
        size_hint: None, None
        height: Window.height * 0.15
        width: self.height
        pos: 0, (root.top * 0.85)
        on_release:
            root.open_NavPopup()
            print('pressed')
        Image:
            source: 'images/NavIcon.png'
            keep_ratio: False
            allow_stretch: True
            y: self.parent.y
            x: self.parent.x
            size: self.parent.size

    Label:
        font_size: self.width * 0.1
        color: 1,1,1,1
        center_x: self.width / 2
        y: self.height / 2.35
        text: 'Games List'

我尝试将canvas.before更改为canvas.after,并将覆盖层放在gridlayout中,使其与之一起滚动。两者都不起作用。有什么建议吗?或者我应该放弃并做一些在x轴上滚动的事情吗?

请参考示例和输出以了解详细信息

gameslist.py
  • 从屏幕管理器添加导入游戏屏幕
  • 将根小部件从ScrollView更改为BoxLayout
  • gameslist.kv
  • 添加#:包括screenmanager.kv
  • 将GamesListScreen声明为RootWidget的子小部件
  • 对滚动视图进行更改
  • 例子 gameslist.py gameslist.kv
    #:导入ScrollEffect kivy.effects.scroll.ScrollEffect
    #:导入按钮kivy.uix.Button.Button
    #:导入窗口kivy.core.Window.Window
    #:包括screenmanager.kv
    :
    方向:“垂直”
    游戏屏幕:
    滚动视图:
    效果:滚动效果
    大小提示:1,无
    尺寸:窗宽(窗高*.85)
    网格布局:
    是否滚动\u x:False
    高度:自身最小高度
    尺寸提示:无
    间距:5,5
    科尔斯:1
    关于家长:
    对于范围(10)中的i:txt=“Game{}”。格式(i);self.add\u小部件(按钮(text=txt,size\u hint\u y=None,
    高度=窗高度(0.1))
    
    输出
    有关详细信息,请参考示例和输出

    gameslist.py
  • 从屏幕管理器添加导入游戏屏幕
  • 将根小部件从ScrollView更改为BoxLayout
  • gameslist.kv
  • 添加#:包括screenmanager.kv
  • 将GamesListScreen声明为RootWidget的子小部件
  • 对滚动视图进行更改
  • 例子 gameslist.py gameslist.kv
    #:导入ScrollEffect kivy.effects.scroll.ScrollEffect
    #:导入按钮kivy.uix.Button.Button
    #:导入窗口kivy.core.Window.Window
    #:包括screenmanager.kv
    :
    方向:“垂直”
    游戏屏幕:
    滚动视图:
    效果:滚动效果
    大小提示:1,无
    尺寸:窗宽(窗高*.85)
    网格布局:
    是否滚动\u x:False
    高度:自身最小高度
    尺寸提示:无
    间距:5,5
    科尔斯:1
    关于家长:
    对于范围(10)中的i:txt=“Game{}”。格式(i);self.add\u小部件(按钮(text=txt,size\u hint\u y=None,
    高度=窗高度(0.1))
    
    输出

    #:import ScrollEffect kivy.effects.scroll.ScrollEffect
    #:import Button kivy.uix.button.Button
    
    <RootWidget>
        effect_cls: ScrollEffect
        GridLayout:
            do_scroll_x: False
            height: self.minimum_height
            size_hint: 1, None
            size: Window.width, (Window.height * .85)
            spacing: 5, 5
            padding: [0,(Window.height * .17),0,0]
            cols: 1
            on_parent:
                self.add_widget(Button(text = "Game 1", size_hint_y = None, height = Window.height * .1))
                self.add_widget(Button(text = "Game 2", size_hint_y = None, height = Window.height * .1))
                self.add_widget(Button(text = "Game 3", size_hint_y = None, height = Window.height * .1))
                self.add_widget(Button(text = "Game 4", size_hint_y = None, height = Window.height * .1))
                self.add_widget(Button(text = "Game 5", size_hint_y = None, height = Window.height * .1))
                self.add_widget(Button(text = "Game 6", size_hint_y = None, height = Window.height * .1))
                self.add_widget(Button(text = "Game 7", size_hint_y = None, height = Window.height * .1))
                self.add_widget(Button(text = "Game 8", size_hint_y = None, height = Window.height * .1))
                self.add_widget(Button(text = "Game 9", size_hint_y = None, height = Window.height * .1))
                self.add_widget(Button(text = "Game 10", size_hint_y = None, height = Window.height * .1))
    
    from kivy.app import App
    from kivy.lang import Builder
    from kivy.uix.label import Label
    from kivy.uix.image import Image
    from kivy.uix.scrollview import ScrollView
    Builder.load_file('gameslist.kv')
    
    class RootWidget(ScrollView):
        pass
    
    class runGamesList(App):
        def build(self):
            root = RootWidget()
            return root
    
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from screenmanager import GamesListScreen
    
    
    class RootWidget(BoxLayout):
        pass
    
    
    class GamesListApp(App):
        def build(self):
            return RootWidget()
    
    
    if __name__ == "__main__":
        GamesListApp().run()
    
    #:import ScrollEffect kivy.effects.scroll.ScrollEffect
    #:import Button kivy.uix.button.Button
    #:import Window kivy.core.window.Window
    #:include screenmanager.kv
    
    <RootWidget>:
        orientation: 'vertical'
    
        GamesListScreen:
    
        ScrollView:
            effect_cls: ScrollEffect
            size_hint: 1, None
            size: Window.width, (Window.height * .85)
    
            GridLayout:
                do_scroll_x: False
                height: self.minimum_height
                size_hint_y: None
                spacing: 5, 5
                cols: 1
                on_parent:
                    for i in range(10): txt = "Game {}".format(i); self.add_widget(Button(text = txt, size_hint_y = None,
                    height = Window.height * .1))