Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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
Python ScrollView小部件未在kivy中滚动_Python_Kivy - Fatal编程技术网

Python ScrollView小部件未在kivy中滚动

Python ScrollView小部件未在kivy中滚动,python,kivy,Python,Kivy,在尝试使动态生成的标签堆栈可滚动时,我在使用ScollView小部件时遇到了一些问题。我可能误解了ScrollView的使用方式,所以我希望有人能为我澄清一下。下面的代码从csv读取一组数据,当显示该代码时,如果有大量数据,程序基本上会尝试将所有文本/标签压缩到GridLayout中。我希望数据可以滚动。下面是代码的抽象版本: class showData(Screen): def __init__(self, **kwargs): super(showData, self).__ini

在尝试使动态生成的标签堆栈可滚动时,我在使用ScollView小部件时遇到了一些问题。我可能误解了ScrollView的使用方式,所以我希望有人能为我澄清一下。下面的代码从csv读取一组数据,当显示该代码时,如果有大量数据,程序基本上会尝试将所有文本/标签压缩到GridLayout中。我希望数据可以滚动。下面是代码的抽象版本:

class showData(Screen):
def __init__(self, **kwargs):
    super(showData, self).__init__(**kwargs)

    self.my_data = read_csv_to_dict()
    self.data_exists = 0 if len(self.my_data) == 0 else 1 

    ### Create Widgets ###      
    layout_main = BoxLayout(orientation = 'vertical')
    layout_back_button = BoxLayout(padding = [0, 0, 0, 20])
    self.layout_data = GridLayout(cols = 3 if self.data_exists else 1)  
    self.scrollview_data = ScrollView()

    button_back = Button(text = 'Main menu')

    ### Add widgets ###
    self.add_widget(layout_main)
    layout_main.add_widget(layout_back_button)
    layout_main.add_widget(self.scrollview_data)

    layout_back_button.add_widget(button_back)

    if self.data_exists:
        self.layout_data.add_widget(Label(text = 'label 1'))
        self.layout_data.add_widget(Label(text = 'label 2'))
        self.layout_data.add_widget(Label(text = 'label 3'))
        self.display_data(self)
        self.scrollview_data.add_widget(self.layout_data)
    else:
        self.scrollview_data.add_widget(Label(text = 'Records are empty'))

    ### Create button bindings ###
    button_back.bind(on_press = switch_screen_to_main)      

def display_data(obj, self):

    data_dictReader = read_csv_to_dictReader()

    for data_row in data_dictReader:
        for value in data_row.values():
            self.layout_data.add_widget( Label( text = value))
GridLayout/数据不可滚动。有人能告诉我如何修复上面的代码使其可滚动吗?多谢各位

您的GridLayout上缺少。它们是确保GridLayout“足够大,可以滚动”所必需的:

  • 您必须确保将
    size\u hint\u y
    设置为
    None
    ,因为默认的
    1
    在这种情况下并不方便
  • GridLayout
    最小\u高度绑定到
    layout.setter('height')
  • 确保
    滚动视图
    的大小适合滚动
  • 此示例与您在文档中找到的非常相似:

    from kivy.app import App
    from kivy.uix.scrollview import ScrollView
    from kivy.uix.gridlayout import GridLayout
    from kivy.uix.button import Button
    
    class Example(App):
    
        def build(self):
            layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
            # Make sure the height is such that there is something to scroll.
            layout.bind(minimum_height=layout.setter('height'))
            for i in range(30):
                btn = Button(text=str(i), size_hint_y=None, height=40)
                layout.add_widget(btn)
            root = ScrollView()
            root.add_widget(layout)
            return root
    
    if __name__ == '__main__':
        Example().run()
    

    在本例中,
    ScrollView
    窗口的大小
    ,但您可以使用
    size\u提示
    size
    属性对其进行操作。

    在对上述各种属性进行了一些争论之后,它开始工作了。谢谢