Kivy 简明教程

Kivy - Label

在任何 GUI 工具包中,标签是使用最频繁的小组件之一。标签显示可直接编辑的任意文本内容。标签用于显示页面标题,作为输入控件(如文本框)的字段名称的占位符,或仅仅用作输出消息的呈现。

在 Kivy 中,标签小组件是 Label 类的一个对象,定义在“kivy.uix.label”模块中。

from kivy.uix.Label import Label
lbl = Label(**kwargs)

要定制标签对象,你可以使用以下属性作为构造函数的关键字参数:

  1. bold − bold 是一个 BooleanProperty,默认为 False。将其设置为 True 可以使用字体的粗体版本。请注意,根据你的字体,粗体属性可能对你的文本呈现没有任何影响。

  2. color − 文本颜色,格式为 (r, g, b, a)。它是一个 ColorProperty,默认为 [1, 1, 1, 1]。

  3. disabled_color − 禁用标签时文本的颜色,格式为 (r, g, b, a)。它是一个 ColorProperty,默认为 [1, 1, 1, .3]。

  4. font_name − 要使用的字体的文件名。font_name 是一个 StringProperty,默认为“Roboto”。此值取自 Config。

  5. font_size − 文本的字体大小,以像素为单位。它是一个 NumericProperty,默认为 15sp。

  6. halign − 文本的水平对齐方式。halign 是一个 OptionProperty,默认为“auto”。可用选项有:auto、left、center、right 和 justify。

  7. italic − 表示使用字体斜体版本。italic 是一个 BooleanProperty,默认为 False。

  8. markup − 如果为 True,则使用 MarkupLabel 呈现文本:可以使用标记更改文本样式。

  9. outline_color − 文本轮廓的颜色,格式为 (r, g, b)。它是一个 ColorProperty,默认为 [0, 0, 0, 1]

  10. padding − 以 [padding_left, padding_top, padding_right, padding_bottom] 格式设置文本的填充。padding 还接受 [padding_horizontal, padding_vertical] 和 [padding] 的两个参数形式和一个参数形式。

  11. strikethrough − 向文本添加删除线。strikethrough 是一个 BooleanProperty,默认为 False。

  12. text − 标签标题的文本。text 是一个 StringProperty,默认为“”。例如:

lbl = Label(text='Hello world')
  1. text_size − 默认情况下,标签不受任何边界框约束。你可以使用此属性设置标签的大小约束。文本将自动流入约束。因此,虽然字体大小不会减小,但文本将被安排,以尽可能最佳地适应文本框,任何仍然在文本框外的文本都会被剪切。

Label(text='long text . . . ', text_size=(200, None))

text_size 是一个 ListProperty,默认为 (None, None),表示默认没有任何尺寸限制。

  1. texture − 文本纹理对象。在属性更改时自动呈现文本。纹理是一个 ObjectProperty,默认为 None。

  2. texture_size − 文本的纹理大小。大小由字体大小和文本决定。如果 text_size 为 [None, None],那么纹理将为适合文本所需的尺寸,否则它将被剪切以适合 text_size。

  3. underline − 在文字下方添加下划线。underline 是一个 BooleanProperty 并且默认为 False

  4. valign − 文字的垂直对齐方式。它是一个 OptionProperty 并且默认为 bottom 。可用的选项有:bottommiddle(或 center)和 top

Alignment

尽管 Label 类具有 halignvalign 属性,但文字图像(纹理)只大到足以使字符定位在 Label 的中心。

valign 属性没有效果而 halign 只有在文字有新行时才有效;即使 halign 设置为左(默认为左),单行文字仍将居中显示。

为了使对齐属性生效,需要设置 text_size,它是文字对齐所在边界框的大小。例如,以下代码将此大小绑定到 Label 的大小,因此文字将对齐在控件边界之内。

Label:
   text_size: self.size
   halign: 'left'
   valign: 'middle'

Markup

如果 Labelmarkup 属性为 True,则将使用 Text 标记渲染文字,用于多行文字设置样式。与 html 标记类似,Text 标记标记带有 [tag],并且应该有一个相应的 [/tag] 结束标记。例如 −

[b]Hello [color=ff0000]world[/color][/b]

可以使用以下标记来构造标签文字 −

Sr.No

标记 & 标签文字说明

1

*[b][/b]*Activate bold text

2

*[i][/i]*Activate italic text

3

*[u][/u]*Underlined text

4

*[s][/s]*Strikethrough text

5

[font=<str>][/font] 更改字体(注意 - 指的是 TTF 文件或注册别名)

6

[size=<size>][/size] 更改字体大小。应该是一个整数,可选地带有单位(例如,16sp)

7

*[color=#<color>][/color]*Change the text color

8

[sub][/sub] 在它之前的文字相对于该文字显示在下标位置。

9

[sup][/sup] 在它之前的文字相对于该文字显示在上标位置。

例如,这创建了一个标签 hello world,其中的 world 为加粗

l = Label(text='Hello [b]World[/b]', markup=True)

Sizing

Label 的大小不受文字内容影响,而文字也不受大小影响。为了控制大小,必须指定 text_size 以约束文字和/或将 size 绑定到 texture_size 以随着文字而增加。

例如,在 kv 语言脚本中,这个标签的大小将设置为文字内容(加上衬垫) −

Label:
   size: self.texture_size

Example

现在我们将在以下示例中演示如何使用一些 Label 属性。此处将三个标签放置在垂直框布局中。每个标签都是使用 Label 类的特定属性构造的。

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.graphics import Color, Rectangle
from kivy.core.window import Window

Window.size = (720, 350)

class LblApp(App):
   def build(self):
      layout = BoxLayout(orientation='vertical')
      self.l1 = Label(
         text='Hello World', color=[1, 0, 0, 1],
         font_size=40, bold=True
   )

   self.l2 = Label(
   text='Hello Python', color=[0, 1, 0, 1],
   font_size=40, italic=True
   )

   self.l3 = Label(
      text='Hello Kivy', color=[0, 0, 1, 1],
      font_size=40, font_name='Arial',
      underline=True
   )
   layout.add_widget(self.l1)
   layout.add_widget(self.l2)
   layout.add_widget(self.l3)
   return layout

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

Output

运行以上程序时,将显示三个标签,其标题具有代码中定义的相应格式化属性 −

kivy label

Example with kv file

现在将使用“kv”文件创建以上设计。除了以上 Python 代码中使用的属性以外,还会给每个标签应用背景颜色。

Label 类不支持背景颜色属性。为了克服这个问题,我们在按钮的画布上绘制一个以所需颜色作为填充色的矩形。例如 −

Label:
   canvas:
      Color :
         rgba: 0, 1, 0, 0.25
      Rectangle:
         pos:self.pos
         size : self.size

我们将使用此功能为三个标签应用不同的颜色作为背景。

BoxLayout:
   orientation:'vertical'
   Label:
      text:'Hello World'
      color : [1,0,0,1]
      font_size : 40
      bold : True
      canvas:
         Color :
            rgba: 0, 1, 0, 0.25
         Rectangle:
            pos:self.pos
            size : self.size

   Label:
      text:'Hello Python'
      color:[0,1,0,1]
      font_size:40
      italic:True
      canvas:
         Color :
            rgba: 1, 1, 0, 0.1
         Rectangle:
            pos:self.pos
            size : self.size
   Label:
      text:'Hello Kivy'
      color:[0,0,1,1]
      font_size:40
      font_name:'Arial'
      underline:True

Output

将此 “lbl.kv” 文件集成到 Python Kivy应用程序中,然后运行该程序。您应该获得以下显示,显示三个标签,对应不同的背景颜色。

kivy three labels