Kivy - 堆疊佈局



StackLayout 類的一個物件充當小部件容器,其中子小部件並排放置,水平或垂直方向取決於 orientation 屬性。佈局尺寸可以容納儘可能多的部件。每個部件的尺寸可以是不同的。

讓我們假設 StackLayout 物件被配置為從左到右、從上到下放置部件。“x”個部件水平放置後,如果無法在同一行放置部件“x+1”,則將其推到下一行,依此類推,直到佈局高度耗盡。

StackLayout 類定義在 “kivy.uix.stacklayout” 模組中。

from kivy.uix.stacklayout import StackLayout
stack = StackLayout(**kwargs)

透過定義以下屬性來自定義 StackLayout 物件:

  • minimum_width - 自動計算包含所有子項所需的最小寬度。它是一個 NumericProperty,預設為 0。它是隻讀的。

  • minimum_height - 自動計算包含所有子項所需的最小高度。它是一個 NumericProperty,預設為 0。它是隻讀的。

  • minimum_height - 自動計算包含所有子項所需的最小高度。minimum_height 是一個 NumericProperty,預設為 0。它是隻讀的。

  • minimum_size - 自動計算包含所有子項所需的最小尺寸。minimum_size 是 (minimum_width, minimum_height) 屬性的 ReferenceListProperty。它是隻讀的。

  • minimum_width - 自動計算包含所有子項所需的最小寬度。minimum_width 是一個 NumericProperty,預設為 0。它是隻讀的。

  • orientation - 佈局的方向。此屬性決定小部件如何在網格中的連續單元格中放置。orientation 是一個 OptionProperty。其有效值為:

    • 'lr-tb' - 單元格從左到右,從上到下填充。

    • 'tb-lr' - 單元格從上到下,從左到右填充。

    • 'rl-tb' - 單元格從右到左,從上到下填充。

    • 'tb-rl' - 單元格從上到下,從右到左填充。

    • 'lr-bt' - 單元格從左到右,從下到上填充。

    • 'bt-lr' - 單元格從下到上,從左到右填充。

    • 'rl-bt' - 單元格從右到左,從下到上填充。

    • 'bt-rl' - 單元格從下到上,從右到左填充。

orientation 屬性的預設值為 'lr-tb'。

示例

下面的程式演示了 StackLayout 的用法。如前所述,預設方向是 'lr-tb'。寬度逐漸增加但高度相同的按鈕從左到右,然後從上到下排列。

當下一個按鈕無法適應當前行時,它會被向下推。每個按鈕的標題都是一個介於 1 到 50 之間的隨機生成的唯一數字。

from kivy.app import App
from kivy.uix.button import Button
from kivy.config import Config
from kivy.uix.stacklayout import StackLayout
import random

Config.set('graphics', 'width', '720')
Config.set('graphics', 'height', '400')
Config.set('graphics', 'resizable', '1')

class StackApp(App):
   def build(self):
      stack = StackLayout()
      width=100
      nums=[]
      for i in range(1, 25):
         while True:
            num = random.randint(1,25)
            if num not in nums:
               nums.append(num)
               btn = Button(
                  text = str(num), width=width,
                  size_hint=(None, 0.15)
               )
               width = width+num*2
               stack.add_widget(btn)
               break
      return stack
StackApp().run()

輸出

它將生成如下所示的堆疊佈局:

Kivy Stack Layout

如果嘗試調整視窗大小,按鈕的位置將相應更改,並且它們將被容納在上排,或向下推。

讓我們將佈局的方向更改為 'tb-lr'。

stack = StackLayout(orientation='tb-lr')

再次執行程式並檢視更改:

Kivy Change Orientation

再次將 orientation 屬性更改為 'rl-bt' 並執行程式:

stack = StackLayout(orientation='rl-bt')

佈局開始從右到左、從下到上填充按鈕。結果,生成的視窗如下所示:

Kivy Stack Layout Right To Left
廣告
© . All rights reserved.