Kivy - 錨點佈局



當使用此佈局時,我們可以以某種方式在其內部排列小部件,使其固定到佈局尺寸的某個位置。AnchorLayout 類在“kivy.uix.anchorlayout”模組中定義。

from kivy.uix.anchorlayout import AnchorLayout
lo = AnchorLayout(**kwargs)

關鍵字引數

  • anchor_x − 定義要放置的小部件的水平錨點。它是一個 OptionProperty,其值必須來自'left'、'center'或'right'。預設為'center'。

  • anchor_y − 定義要放置的小部件的垂直錨點。它是一個 OptionProperty,其值必須來自'top'、'center'或'bottom'。預設為'center'。

  • padding − 小部件框與其子項之間的填充,以畫素為單位:[padding_left, padding_top, padding_right, padding_bottom]。它也接受兩個引數的形式[padding_horizontal, padding_vertical]和一個引數的形式[padding]。padding 是一個 VariableListProperty,預設為 [0, 0, 0, 0]。

Kivy Anchor Layout

AnchorLayout 類繼承了兩個方法“add_widget()”和“remove_widget()”,我們已經在前面的章節中介紹過。

示例 1

以下示例顯示了 AnchorLayout 的典型用法 -

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.anchorlayout import AnchorLayout
from kivy.core.window import Window

Window.size = (720, 400)

class DemoApp(App):
   def build(self):
      lo = AnchorLayout(
         anchor_x='left', anchor_y='bottom'
      )
      self.l1 = Label(
         text='Hello World', font_size=20,
         size_hint=(None, None), size=(200, 75)
      )
      lo.add_widget(self.l1)
      return lo

if __name__ == '__main__':
   DemoApp().run()

輸出

可以看出,標籤已固定到佈局的左下角。

Kivy Anchor Layout Hello World

使用 AnchorLayout 的 Kivy 應用程式也可以使用“kv”語言指令碼構建 -

AnchorLayout:
   anchor_x : 'left'
   anchor_y : 'bottom'
   Label:
      id:l1
      text: 'Hello World'
      font_size: '20pt'
      size_hint : (None, None)
      size : (200, 75)

示例 2

在下面的示例中,應用程式視窗具有一個頂級 GridLayout,其中包含要排列在 3 行中的小部件。在每一行中,我們放置三個 AnchorLayout,以便視窗包含九個 AnchorLayout,其 anchor-x 和 anchor-y 屬性分別為左上、左中、左下、中上、中中、中下、右上、右中和右下。

在每個佈局中,根據錨點配置放置一個按鈕小部件。

from kivy.app import App
from kivy.uix.button import Button
from kivy.config import Config
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.gridlayout import GridLayout

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

class AnchorApp(App):
   def build(self):
      lo = GridLayout(rows=3)
      ax = ['left', 'center', 'right']
      ay = ['top', 'center', 'bottom']
      c = 0

      # 3X3 grid with anchor layout in each
      for i in range(3):
         for j in range(3):
            print(ax[i], ay[j])
            anchrlo = AnchorLayout(
               anchor_x=ax[i], anchor_y=ay[j]
         )
         b = Button(
            text=ax[i] + "-" + ay[j],
            size_hint=(None, None),
            size=(200, 75), halign=ax[i]
         )
         
         # red text color for top row,
         # green for middle row,
         # blue for bottom row
         if i == 0: b.color = [1, 0, 0, 1]
         if i == 1: b.color = [0, 1, 0, 1]
         if i == 2: b.color = [0, 0, 1, 1]
         
         anchrlo.add_widget(b)
         lo.add_widget(anchrlo)
      return lo
AnchorApp().run()

輸出

執行此程式碼時,它將生成以下輸出視窗 -

Kivy Anchor Layout 3 Rows
廣告