Kivy 简明教程

Kivy - Box Layouts

Kivy 框架提供 BoxLayout 类,可通过此类对小部件进行按顺序排列。序列由 BoxLayout 对象的方向属性决定,并且可以是字符串:“vertical”或“horizontal”。

BoxLayout 类在“kivy.uix.boxlayout”模块中定义。要声明 BoxLayout 对象,请使用。

from kivy.uix.boxlayout import BoxLayout
blo = BoxLayout(**kwargs)

Properties

  1. orientation − 布局方向。orientation 是一个 OptionProperty,默认为“horizontal”。可以是“vertical”或“horizontal”。

  2. padding − 布局框与子类之间的填充:[padding_left, padding_top, padding_right, padding_bottom]。padding 也接受一个双参数形式 [padding_horizontal, padding_vertical] 和一个单参数形式 [padding]。

  3. minimum_height - 自动计算包含所有子项所需的最小高度。minimum_height 是一个 NumericProperty,默认为 0。它是只读的。

  4. minimum_size - 自动计算包含所有子项所需的最小大小。minimum_size 是 (minimum_width, minimum_height) 属性的 ReferenceListProperty。它是只读的。

  5. minimum_width - 自动计算包含所有子项所需的最小宽度。minimum_width 是一个 NumericProperty,默认为 0。它是只读的。

kivy box layouts
kivy vertical box layouts

BoxLayout 类还继承了 add_widget()remove_widget() 方法,我们之前已经讨论过这些方法。

Vertical BoxLayout

以下是 BoxLayout 的典型用法。我们在垂直框布局中添加了一个标签、一个文本输入和一个按钮。

Example

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
Window.size = (720,200)

class DemoApp(App):
   def build(self):
      lo = BoxLayout(orientation = 'vertical')
      self.l1 = Label(text='Enter your name', font_size=20)
      self.t1 = TextInput(font_size = 30)
      self.b1 = Button(text = 'Submit', size_hint = (None, None),pos_hint={'x':.4, 'y':.2}, size = (200,75))
      lo.add_widget(self.l1)
      lo.add_widget(self.t1)
      lo.add_widget(self.b1)
      return lo

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

Output

它将生成如下输出:

kivy box layouts name

可以使用以下“Demo.kv”文件构建上述 GUI −

BoxLayout:
   orientation : 'vertical'
   Label:
      id : l1
      text : 'Enter your name'
      font_size : '20pt'
   TextInput:
      id : t1
      font_size : 30
   Button:
      id : b1
      text : 'Submit'
      size_hint : (None, None)
      pos_hint : {'x':.4, 'y':.2}
      size : (200,75)

Horizontal BoxLayout

在以下程序中,我们在具有水平方向的框布局中放置了一个标签、一个文本输入框和一个按钮。

Example

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.core.window import Window

Window.size = (720,200)

class DemoApp(App):
   def build(self):
      self.lo = BoxLayout(orientation = 'horizontal')
      self.l1 = Label(text='Enter your name', font_size=20)
      self.t1 = TextInput(font_size = 30, pos_hint={'y':0.25}, pos = (0,100), size_hint = (None, None), size = (650,100))
      self.b1 = Button(text = 'Submit', size_hint = (None, None),pos_hint={'x':.4, 'y':.35}, size = (75, 40))
      self.lo.add_widget(self.l1)
      self.lo.add_widget(self.t1)
      self.lo.add_widget(self.b1)
      return self.lo

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

Output

它将生成如下输出:

kivy input box

可以使用以下“Demo.kv”文件获得相同的 GUI 设计 −

BoxLayout:
   orientation : 'horizontal'
   Label:
      text : 'Enter your name'
      font_size : '20pt'
   TextInput :
      font_size : '30pt'
      pos_hint : {'y':0.25}
      pos : (0,100)
      size_hint : (None, None)
      size : (650,100)
   Button :
      text : 'Submit'
      size_hint : (None, None)
      pos_hint : {'x':.4, 'y':.35}
      size : (75, 40)