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


    章节知识点总揽

    4.2 Label标签

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

    4.2.1 使用方法

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

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

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

    1. from kivy.app import App
    2. from kivy.uix.floatlayout import FloatLayout
    3. from kivy.uix.label import Label
    4. class FloatLayoutWidget(FloatLayout):
    5. def __init__(self,**kwargs):
    6. super().__init__(**kwargs)
    7. la = Label(text='Hello world')
    8. self.add_widget(la)
    9. class LabelApp(App):
    10. def build(self):
    11. return FloatLayoutWidget()
    12. if __name__ == '__main__':
    13. LabelApp().run()

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

    1. Label:
    2. text:'Hello world'

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

    1. from kivy.app import App
    2. from kivy.uix.floatlayout import FloatLayout
    3. from kivy.uix.label import Label
    4. class FloatLayoutWidget(FloatLayout):
    5. def __init__(self,**kwargs):
    6. super().__init__(**kwargs)
    7. class LabelApp(App):
    8. def build(self):
    9. return FloatLayoutWidget()
    10. if __name__ == '__main__':
    11. LabelApp().run()

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

    1. <FloatLayoutWidget>
    2. Label:
    3. 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布局,具体代码如下:

    1. from kivy.app import App
    2. from kivy.uix.boxlayout import BoxLayout
    3. class LabelBoxLayout(BoxLayout):
    4. def __init__(self,**kwargs):
    5. super().__init__(**kwargs)
    6. class LabelApp(App):
    7. def build(self):
    8. return LabelBoxLayout()
    9. if __name__ == "__main__":
    10. LabelApp().run()

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

    1. <LabelBoxLayout>:
    2. orientation:'vertical'
    3. Label:
    4. text:'can only display glyphs that is available in the font'
    5. font_size:'20sp'
    6. color:.9,.2,.1,1
    7. italic:True
    8. text_size:cm(6),mm(20)
    9. halign:'right'
    10. valign:'middle'
    11. strikethrough:True
    12. Label:
    13. canvas:
    14. Color:
    15. rgba:(.1,.1,.1,.1)
    16. Rectangle:
    17. pos:self.pos
    18. size:self.size
    19. text:'can only display glyphs that is availabel in the font'
    20. color:.2,.2,.9,1
    21. bold:True
    22. text_size:cm(4),cm(2)
    23. halign:'left'
    24. valign:'top'
    25. underline:True
    26. line_height:2.0

            运行结果如下图所示:

    6b94b1b87bee445db055a0c6b10fc30d.png

     

    4.2.3 标记文本

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

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

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

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

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

    1. <LabelBoxLayout>:
    2. orientation:'vertical'
    3. Label:
    4. text:'can only display glyphs that is available in the font'
    5. font_size:'20sp'
    6. color:.9,.2,.1,1
    7. markup:1
    8. Label:
    9. canvas:
    10. Color:
    11. rgba:(.1,.1,.1,.1)
    12. Rectangle:
    13. pos:self.pos
    14. size:self.size
    15. text:'can only display glyphs that is availabel in the font'
    16. color:.2,.2,.9,1
    17. markup:True

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

    46ae75d3f7e34f6788b5d3548869408e.png

     

    4.3.4 触发事件

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

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

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

            main,py内容:

    1. from kivy.app import App
    2. from kivy.uix.boxlayout import BoxLayout
    3. from kivy.uix.label import Label
    4. class LabelBoxLayout(BoxLayout):
    5. def __init__(self,**kwargs):
    6. super().__init__(**kwargs)
    7. #设置引用时,markup属性必须设置为真(True1等)
    8. #将“Label”文本标记,单击“Label”文本时会触发绑定的事件,单击“Hello”文本则不会
    9. label_ref = Label(text='Hello[ref=label]Label[/ref]',markup=True,color=(.9,.2,.1,1))
    10. #绑定触发事件,回调方法
    11. label_ref.bind(on_ref_press=self.print_it)
    12. self.add_widget(label_ref)
    13. #未使用到self,建议设置为静态方法
    14. @staticmethod
    15. def print_it(*args):
    16. print('print_it is running')
    17. class LabelApp(App):
    18. def build(self):
    19. return LabelBoxLayout()
    20. if __name__ == "__main__":
    21. from kivy.core.window import Window
    22. Window.clearcolor=[1,1,1,1]
    23. LabelApp().run()

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

    a2a1488670aa4387b0adc7b8ffd131ae.png

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

    1. <LabelBoxLayout>:
    2. orientation:'vertical'
    3. Label:
    4. canvas:
    5. Color:
    6. rgba:(.1,.1,.1,.1)
    7. Rectangle:
    8. pos:self.pos
    9. size:self.size
    10. text:'[ref="click"]can only display[/ref]glyphs that is availabel in the
    11. font'
    12. color:.2,.2,.9,1
    13. markup:True
    14. on_ref_press:
    15. print('ref named click is running')
    16. root.print_it()

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

    b3b7f194beac4c469857a66a4a8765e0.png

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

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

     

     

  • 相关阅读:
    Promise原理及实现
    设计模式系列之MVC模式
    JavaScript基础(13)_原型、原型对象
    LOOK!菊风可视化回溯解决方案,快速上线全面保障业务合规
    回溯--字母迷宫
    mapstruct常见错误及解决方案
    常见荧光染料修饰多种基团及其激发和发射波长数据一览数据
    docker安装和使用
    颐养优选元宇宙
    C#应用程序的多语言方案 - 开源研究系列文章
  • 原文地址:https://blog.csdn.net/lstef/article/details/127628823