2013-09-26 2 views
4

동적으로 생성 된 레이블 스택을 스크롤 가능하게 만들기 위해 ScollView 위젯을 사용할 때 몇 가지 문제가 있습니다. ScrollView를 사용해야하는 방식을 오해하고있는 사람이있을 수 있으므로 누군가가 나를 위해 설명해 줄 수 있기를 바랍니다. 다음 코드는 csv에서 많은 데이터를 읽습니다. 코드가 표시되면 많은 양의 데이터가 있으면 프로그램은 기본적으로 모든 텍스트/레이블을 GridLayout으로 압축하려고 시도합니다. 데이터를 스크롤 가능하게하고 싶습니다. 다음은 코드의 추상화 된 버전입니다.ScrollView 위젯이 kivy에서 스크롤되지 않습니다

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/데이터는 스크롤 할 수 없습니다. 누군가가 스크롤 할 수 있도록 위의 코드를 수정하는 방법을 알려 줄 수 있습니까? 고맙습니다.

답변

8

GridLayout에 a few things from the Kivy Documentation가 누락되었습니다. 그들은 GridLayout과는 "스크롤 할만큼 큰"이 있는지 확인 필요 :

  1. 기본 1이 경우
  2. 바인딩 편리하지 않기 때문에 당신의 size_hint_yNone로 설정되었는지 확인있어 GridLayout ~ layout.setter('height')minimum_heightScrollView가 크기이 예에서

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

    :

  3. ScrollView

이 예제는이 문서에서 무엇을 발견 꽤 많이되어 스크롤을 수용 할 수 있도록 적당한 크기를 가지고 있는지 확인 Window 중 하나 일 수 있지만 size_hintsize 속성을 사용하여 조작 할 수 있습니다.

+0

위에서 언급 한 다양한 속성으로 논쟁을 벌인 후 작동 중입니다. 감사! –

관련 문제