Kivy 简明教程
Kivy - Label
在任何 GUI 工具包中,标签是使用最频繁的小组件之一。标签显示可直接编辑的任意文本内容。标签用于显示页面标题,作为输入控件(如文本框)的字段名称的占位符,或仅仅用作输出消息的呈现。
在 Kivy 中,标签小组件是 Label 类的一个对象,定义在“kivy.uix.label”模块中。
from kivy.uix.Label import Label
lbl = Label(**kwargs)
要定制标签对象,你可以使用以下属性作为构造函数的关键字参数:
-
bold − bold 是一个 BooleanProperty,默认为 False。将其设置为 True 可以使用字体的粗体版本。请注意,根据你的字体,粗体属性可能对你的文本呈现没有任何影响。
-
color − 文本颜色,格式为 (r, g, b, a)。它是一个 ColorProperty,默认为 [1, 1, 1, 1]。
-
disabled_color − 禁用标签时文本的颜色,格式为 (r, g, b, a)。它是一个 ColorProperty,默认为 [1, 1, 1, .3]。
-
font_name − 要使用的字体的文件名。font_name 是一个 StringProperty,默认为“Roboto”。此值取自 Config。
-
font_size − 文本的字体大小,以像素为单位。它是一个 NumericProperty,默认为 15sp。
-
halign − 文本的水平对齐方式。halign 是一个 OptionProperty,默认为“auto”。可用选项有:auto、left、center、right 和 justify。
-
italic − 表示使用字体斜体版本。italic 是一个 BooleanProperty,默认为 False。
-
markup − 如果为 True,则使用 MarkupLabel 呈现文本:可以使用标记更改文本样式。
-
outline_color − 文本轮廓的颜色,格式为 (r, g, b)。它是一个 ColorProperty,默认为 [0, 0, 0, 1]
-
padding − 以 [padding_left, padding_top, padding_right, padding_bottom] 格式设置文本的填充。padding 还接受 [padding_horizontal, padding_vertical] 和 [padding] 的两个参数形式和一个参数形式。
-
strikethrough − 向文本添加删除线。strikethrough 是一个 BooleanProperty,默认为 False。
-
text − 标签标题的文本。text 是一个 StringProperty,默认为“”。例如:
lbl = Label(text='Hello world')
-
text_size − 默认情况下,标签不受任何边界框约束。你可以使用此属性设置标签的大小约束。文本将自动流入约束。因此,虽然字体大小不会减小,但文本将被安排,以尽可能最佳地适应文本框,任何仍然在文本框外的文本都会被剪切。
Label(text='long text . . . ', text_size=(200, None))
text_size 是一个 ListProperty,默认为 (None, None),表示默认没有任何尺寸限制。
-
texture − 文本纹理对象。在属性更改时自动呈现文本。纹理是一个 ObjectProperty,默认为 None。
-
texture_size − 文本的纹理大小。大小由字体大小和文本决定。如果 text_size 为 [None, None],那么纹理将为适合文本所需的尺寸,否则它将被剪切以适合 text_size。
-
underline − 在文字下方添加下划线。
underline
是一个 BooleanProperty 并且默认为False
。 -
valign − 文字的垂直对齐方式。它是一个
OptionProperty
并且默认为bottom
。可用的选项有:bottom
、middle
(或center
)和top
。
Alignment
尽管 Label
类具有 halign 和 valign 属性,但文字图像(纹理)只大到足以使字符定位在 Label
的中心。
valign 属性没有效果而 halign 只有在文字有新行时才有效;即使 halign
设置为左(默认为左),单行文字仍将居中显示。
为了使对齐属性生效,需要设置 text_size
,它是文字对齐所在边界框的大小。例如,以下代码将此大小绑定到 Label
的大小,因此文字将对齐在控件边界之内。
Label:
text_size: self.size
halign: 'left'
valign: 'middle'
Markup
如果 Label
的 markup
属性为 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()
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