簡體   English   中英

ScrollView小部件沒有在kivy中肆虐

[英]ScrollView widget not scolling in kivy

我在使用ScollView Widget時遇到了一些問題,試圖讓動態生成的標簽堆棧可滾動。 我可能誤解了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 / data不可滾動。 有人能告訴我如何修復上面的代碼使其可滾動? 謝謝。

您在GridLayout上的Kivy文檔中遺漏了一些內容 它們是確保GridLayout“足夠大以滾動”所必需的:

  1. 您必須確保將size_hint_y設置為None ,因為在這種情況下默認值1不方便
  2. GridLayoutminimum_height綁定到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()

在此示例中, ScrollViewWindow的大小,但您可以使用size_hintsize屬性對其進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM