2013-09-26 6 views
4

У меня возникли проблемы с использованием виджета ScollView, чтобы сделать динамически созданный стек меток прокручиваемым. Возможно, я не понимаю, как использовать ScrollView, поэтому я надеюсь, что кто-то сможет прояснить это для меня. Следующий код считывает кучу данных из csv, и когда этот код отображается, если есть много данных, программа в основном попытается сжать весь текст/ярлыки в GridLayout. Я хочу, чтобы данные были прокручиваемыми. Вот отведенной версия кода:ScrollView виджет не scolling в 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

Вам не хватает a few things from the Kivy Documentation на вашем GridLayout. Они необходимы, чтобы убедиться, что GridLayout «достаточно большой, чтобы прокручивать»:

  1. Вы должны быть уверены, что вы установите size_hint_y в None, потому что по умолчанию 1 не удобно в этом случае
  2. Bind minimum_height от GridLayout до layout.setter('height').
  3. Убедитесь, что ScrollView имеет правильный размер, чтобы приспособить СВИТОК

Этот пример довольно много, что вы можете найти в документации:

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 является размер Window, но вы можете манипулировать ими с объектами size_hint и size.

+0

После нескольких разногласий с различными свойствами, упомянутыми выше, он работает. Благодаря! –

Смежные вопросы