- Kivy 教程
- Kivy - 首頁
- Kivy 基礎
- Kivy - 快速入門
- Kivy - 安裝
- Kivy - 架構
- Kivy - 檔案語法
- Kivy - 應用
- Kivy - Hello World
- Kivy - 應用生命週期
- Kivy - 事件
- Kivy - 屬性
- Kivy - 輸入
- Kivy - 行為
- Kivy 按鈕
- Kivy - 按鈕
- Kivy - 按鈕事件
- Kivy - 按鈕顏色
- Kivy - 按鈕大小
- Kivy - 按鈕位置
- Kivy - 圓形按鈕
- Kivy - 停用按鈕
- Kivy - 圖片按鈕
- Kivy 元件
- Kivy - 元件
- Kivy - 標籤
- Kivy - 文字輸入
- Kivy - 畫布
- Kivy - 直線
- Kivy - 複選框
- Kivy - 下拉列表
- Kivy - 視窗
- Kivy - 滾動檢視
- Kivy - 輪播圖
- Kivy - 滑塊
- Kivy - 圖片
- Kivy - 彈出視窗
- Kivy - 開關
- Kivy - 微調器
- Kivy - 分隔器
- Kivy - 進度條
- Kivy - 氣泡
- Kivy - 標籤頁面板
- Kivy - 散點圖
- Kivy - 手風琴
- Kivy - 檔案選擇器
- Kivy - 顏色選擇器
- Kivy - 程式碼輸入
- Kivy - 模態檢視
- Kivy - 切換按鈕
- Kivy - 相機
- Kivy - 樹檢視
- Kivy - reStructuredText
- Kivy - 動作欄
- Kivy - 影片播放器
- Kivy - 模板檢視
- Kivy - 虛擬鍵盤
- Kivy - 觸控漣漪
- Kivy - 音訊
- Kivy - 影片
- Kivy - 拼寫
- Kivy - 效果
- Kivy - 輸入記錄器
- Kivy - OpenGL
- Kivy - 文字
- Kivy - 文字標記
- Kivy - 設定
- Kivy 佈局
- Kivy - 佈局
- Kivy - 浮動佈局
- Kivy - 網格佈局
- Kivy - 箱式佈局
- Kivy - 堆疊佈局
- Kivy - 錨點佈局
- Kivy - 相對佈局
- Kivy - 頁面佈局
- Kivy - 迴圈佈局
- Kivy - 佈局巢狀佈局
- Kivy 高階概念
- Kivy - 配置物件
- Kivy - 圖集
- Kivy - 資料載入器
- Kivy - 快取管理器
- Kivy - 控制檯
- Kivy - 動畫
- Kivy - 多筆畫
- Kivy - 時鐘
- Kivy - SVG
- Kivy - UrlRequest
- Kivy - 剪貼簿
- Kivy - 工廠
- Kivy - 手勢
- Kivy - 語言
- Kivy - 圖形
- Kivy - 繪圖
- Kivy - 打包
- Kivy - Garden
- Kivy - 儲存
- Kivy - 向量
- Kivy - 工具
- Kivy - 檢查器
- Kivy - 工具
- Kivy - 日誌記錄器
- Kivy - 幀緩衝區
- Kivy 應用和專案
- Kivy - 繪圖應用
- Kivy - 計算器應用
- Kivy - 計時器應用
- Kivy - 相機處理
- Kivy - 圖片檢視器
- Kivy - 貝塞爾曲線
- Kivy - 畫布壓力測試
- Kivy - 圓形繪製
- Kivy - 元件動畫
- Kivy - 其他
- Kivy 有用資源
- Kivy - 快速指南
- Kivy - 有用資源
- Kivy - 討論
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()
輸出
它將生成如下所示的堆疊佈局:
如果嘗試調整視窗大小,按鈕的位置將相應更改,並且它們將被容納在上排,或向下推。
讓我們將佈局的方向更改為 'tb-lr'。
stack = StackLayout(orientation='tb-lr')
再次執行程式並檢視更改:
再次將 orientation 屬性更改為 'rl-bt' 並執行程式:
stack = StackLayout(orientation='rl-bt')
佈局開始從右到左、從下到上填充按鈕。結果,生成的視窗如下所示: