《Python+Kivy(App开发)从入门到实践》自学笔记:简单UX部件——Label标签

章节知识点总揽

4.2 Label标签

        在Kivy中,Label小部件用于呈现文本,它仅支持ASCII和Unicode编码的字符串(不支持中文),在Label中,可以设置文本内容、字体、大小、颜色、对齐方式、换行、引用以及标记文字等内容。

4.2.1 使用方法

        在.py文件里,使用标签需要引入Label类,通过Label类生成一个标签,再通过add_widget()方法添加到布局中即可,具体方法如下:

from kivy.uix.label import Label
la = Label(text='Hello world')
self.add_widget(la)

        新建main.py文件,使用floatlayout布局,内容如下:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label


class FloatLayoutWidget(FloatLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)

        la = Label(text='Hello world')
        self.add_widget(la)

class LabelApp(App):
    def build(self):
        return FloatLayoutWidget()

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

        相比之下,在.kv文件里使用标签就非常简单,无需引用即可食用,具体代吗如下:

Label:
    text:'Hello world'

        修改main.py文件,去掉布局内容,具体如下:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label


class FloatLayoutWidget(FloatLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)


class LabelApp(App):
    def build(self):
        return FloatLayoutWidget()

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

        根据main.py中LabelApp()方法命名,新建label.kv文件,内容如下:

<FloatLayoutWidget>
	Label:
		text:'Hello world'

        运行main.py文件,如下图所示:

7a9bf823cb3d4361a7593a36954c3672.png

 4.2.2 常用属性

        Kivy为Label标签提供了一些常用的属性,关于Label标签的常用属性及说明如下表所示:

属性说明
text标签显示的文本,默认为空字符串
text_size标签文本大小,默认为(None,None),表示无限制
font_name要使用字体的文件名,可以为绝对路径或resource_find解析的相对路径
font_size文本的字体大小,以像素为单位,默认为15sp
bold字体使用粗体,默认为False
italic字体使用斜体,默认为False
color字体颜色,格式为rgba,默认为白色[1,1,1,1]
halign文本的水平对齐方式,默认为'auto',可选参数为:left、center、right、justify
valign文本的垂直对齐方式,默认为'bottom',可选参数为:bottom、middle(或center)、top
markup是否分割所有标记的文本,默认为False
refs使用[ref=xxx]xxx[/ref]标记部分文本,使用时需要将markup属性设置为True
underline在文本上添加下划线,默认为False
padding_x小部件框内文本的水平填充,默认为0
padding_y小部件框内文本的垂直填充,默认为0
padding以(padding_x,padding_y)格式填充文字
texture文本的纹理对象,属性更改时会自动呈现文本,默认为:None
texture_size文本的纹理大小,由字体大小和文本确定
unicode_errors如何处理Unicode解码错误,可选参数为:“strict”、“replace”(默认)和“ignore”
strikethrough在文本中添加删除线
strip与Python内置函数类似,是否删除空格以及换行符,默认为“False”
outline_color文本轮廓的颜色,格式为rgb,默认为[0,0,0]
outline_width文本周围轮廓的宽度,单位为像素,默认为None表示不会渲染轮廓
max_line要使用的最大行数,默认为0,表示无限制
shorten是否应该尽可能缩短文本内容,默认为False
shorten_from在哪一侧缩短文本,默认为center,可选参数为:left、right和center
split_str当shorten为True时,差分字符串,默认为空字符串
is_shortend是否以缩短时间的方式进行渲染,默认为False
line_height文本的行高,默认为1.0
base_disrection文本的基本方向,当halign为auto(默认)时,会影响水平对齐,可设参数为:None、“ltr”(从左至右)、“rtl”(从右到左)、“weak_ltr”和“weak_rlt”
disabled_color禁用小部件时文本轮廓的颜色,格式为rgb,默认为[0,0,0]
ellipsis_options

使用“...”缩短文本,使用时要设置markup和shorten为Ture,默认为空字典{}

font_blended使用混合字体,默认为True
font_context字体上下文,默认为None表示该字体单独使用
font_family字体系列,仅在使用font_context时使用
font_features将CSS格式的OpenType字体直接传给Pango,默认为空字符串
font_hinting渲染字体的提示选项,可选参数为:“normal”“light”“mono”和None
font_kerning是否为字型渲染启用字距调整,默认为True
mipmap是否将OpenGL mipmapping应用于纹理,默认为False

        实例:设置Label标签的常用属性

        在main.py文件内,我们使用的是BoxLayout布局,具体代码如下:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

class LabelBoxLayout(BoxLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)

class LabelApp(App):
    def build(self):
        return LabelBoxLayout()

if __name__ == "__main__":
    LabelApp().run()

        想要设置Label标签的属性,则需要在label.kv文件内,根据需求设置为其相关属性,代码如下:

<LabelBoxLayout>:
	orientation:'vertical'

	Label:
		text:'can only display glyphs that is available in the font'
		font_size:'20sp'
		color:.9,.2,.1,1
		italic:True
		text_size:cm(6),mm(20)
		halign:'right'
		valign:'middle'
		strikethrough:True
	Label:
		canvas:
			Color:
				rgba:(.1,.1,.1,.1)
			Rectangle:
				pos:self.pos
				size:self.size
		text:'can only display glyphs that is availabel in the font'
		color:.2,.2,.9,1
		bold:True
		text_size:cm(4),cm(2)
		halign:'left'
		valign:'top'
		underline:True
		line_height:2.0

        运行结果如下图所示:

6b94b1b87bee445db055a0c6b10fc30d.png

 

4.2.3 标记文本

        在Label中的文本标记非常重要,它可以使样式更加灵活,还可以触发绑定的事件。值得注意的是,在使用时一定要先将markup属性设置为True。在Label标记中可用的属性也非常多,关于Label文本标记的常用属性及说明如下表:

属    性说        明
[b][/b]激活粗体文字
[ref=<str>][/ref]添加一个交互式引用区域
[i][/i]激活斜体文字
[u][/u]带下划线的文字
[s][/s]带删除线的文字
[font=<str>][/font]更改字体
[size=<integer.][/size]更改字体大小
[color=#<color>][/color]更改字体颜色
[anchor=<str>]在文本中添加锚点
[sub][/sub]在相对于之前的文本的下标位置显示文本
[sup][/sup]将文本显示在相对于其之前的上标位置
[font_context=<str>][/font_context]字体上下文,默认为None时表示该字体单独使用
[font_family=<str>][/font_family]字体系列,仅在使用font_context时使用
[font_features=<str>][/font_features将CSS格式的OpenType字体直接传给Pango,默认为空字符串
[text_language=<str>][/text_language]文本语言

        实例:设置Label标签的标记文本

        main.py文件延用上文的内容,在实例中,main.py文件(与”实例:设置Label标签的常用属性”相比)没有发生改变,依然是让其加载.kv文件。

        在box.kv文件中,应用“实例:设置Button按钮并触发事件”部分属性(color、size等),具体代码如下:

<LabelBoxLayout>:
	orientation:'vertical'

	Label:
		text:'can only display glyphs that is available in the font'
		font_size:'20sp'
		color:.9,.2,.1,1
		markup:1
	Label:
		canvas:
			Color:
				rgba:(.1,.1,.1,.1)
			Rectangle:
				pos:self.pos
				size:self.size
		text:'can only display glyphs that is availabel in the font'
		color:.2,.2,.9,1
		markup:True

        执行main.py后,如下图所示:

46ae75d3f7e34f6788b5d3548869408e.png

 

4.3.4 触发事件

        在通过ref标记(可在前面常用属性表中查询)一段文本后,点击这段文本就可以触发“on_ref_press”事件,在该事件中调用相关的回调函数去处理业务逻辑即可。

实例:设置Label标签的触发事件

        在main.py文件中,引入Label来生成一个标签,在用ref标记前,一定先将markup属性设置为True(“1”也可以表示True),随后在触发事件中绑定,回调函数即可。具体代码如下:

        main,py内容:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label

class LabelBoxLayout(BoxLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)

        #设置引用时,markup属性必须设置为真(True或1等)
        #将“Label”文本标记,单击“Label”文本时会触发绑定的事件,单击“Hello”文本则不会
        label_ref = Label(text='Hello[ref=label]Label[/ref]',markup=True,color=(.9,.2,.1,1))

        #绑定触发事件,回调方法
        label_ref.bind(on_ref_press=self.print_it)
        self.add_widget(label_ref)

    #未使用到self,建议设置为静态方法
    @staticmethod
    def print_it(*args):
        print('print_it is running')

class LabelApp(App):
    def build(self):
        return LabelBoxLayout()


if __name__ == "__main__":
    from kivy.core.window import Window
    Window.clearcolor=[1,1,1,1]
    LabelApp().run()

        运行main.py文件,结果如下图:

a2a1488670aa4387b0adc7b8ffd131ae.png

        在label.kv文件中,添加一个标签并直接设置“on_ref_press”,这里基本同.py文件内的用法一致,具体代码如下:

<LabelBoxLayout>:
	orientation:'vertical'

	Label:
		canvas:
			Color:
				rgba:(.1,.1,.1,.1)
			Rectangle:
				pos:self.pos
				size:self.size
		text:'[ref="click"]can only display[/ref]glyphs that is availabel in the 

font'
		color:.2,.2,.9,1
		markup:True
		on_ref_press:
			print('ref named click is running')
			root.print_it()

        使用上文main.py文件,运行结果如下图:

b3b7f194beac4c469857a66a4a8765e0.png

上一篇:简单UX部件——Button按钮

下一篇:简单UX部件——Image图片

 

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静候光阴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值