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

news/2024/4/28 17:18:35/文章来源:https://blog.csdn.net/lstef/article/details/127628823

章节知识点总揽

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 Labelclass 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 Labelclass 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文件,如下图所示:

 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 BoxLayoutclass 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,1italic:Truetext_size:cm(6),mm(20)halign:'right'valign:'middle'strikethrough:TrueLabel:canvas:Color:rgba:(.1,.1,.1,.1)Rectangle:pos:self.possize:self.sizetext:'can only display glyphs that is availabel in the font'color:.2,.2,.9,1bold:Truetext_size:cm(4),cm(2)halign:'left'valign:'top'underline:Trueline_height:2.0

        运行结果如下图所示:

 

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,1markup:1Label:canvas:Color:rgba:(.1,.1,.1,.1)Rectangle:pos:self.possize:self.sizetext:'can only display glyphs that is availabel in the font'color:.2,.2,.9,1markup:True

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

 

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 Labelclass 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,建议设置为静态方法@staticmethoddef print_it(*args):print('print_it is running')class LabelApp(App):def build(self):return LabelBoxLayout()if __name__ == "__main__":from kivy.core.window import WindowWindow.clearcolor=[1,1,1,1]LabelApp().run()

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

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

<LabelBoxLayout>:orientation:'vertical'Label:canvas:Color:rgba:(.1,.1,.1,.1)Rectangle:pos:self.possize:self.sizetext:'[ref="click"]can only display[/ref]glyphs that is availabel in the font'color:.2,.2,.9,1markup:Trueon_ref_press:print('ref named click is running')root.print_it()

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410411.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PCBA方案设计】快速体温计方案

一、电子体温计方案介绍 电子体温计由温度传感器&#xff0c;液晶显示器&#xff0c;纽扣电池&#xff0c;专用集成电路及其他电子元器件组成。能快速准确地测量人体体温&#xff0c;与传统的水银玻璃体温计相比&#xff0c;具有读数方便&#xff0c;测量时间短&#xff0c;测量…

DM数据库安装、登录和创建用户

DM数据库安装、登录和创建用户子安拉取镜像 wget -O dm8_docker.tar -c https://download.dameng.com/eco/dm8/dm8_20220822_rev166351_x86_rh6_64_ctm.tar docker load -i dm8_docker.tar docker images编写docker-compose.yml version: 3 services:dm8:image: dm8_single:v8.…

操作系统(九)进程通信

文章目录1 IPC1.1通信操作1.2通信链路的实现1.3通信分类1.3.1直接通信与间接通信直接通信间接通信1.3.2消息传递的特征1.4缓冲问题1.4.1容量问题2信号&#xff08;signal&#xff09;2.1原理2.2接收信号后处理方式2.3不足2.4实现3管道3.14消息队列5共享内存6socket机制1 IPC i…

为什么选择高防DNS云解析?

DNS&#xff08;Domain Name System&#xff0c;域名服务器&#xff09;是互联网的一项核心服务&#xff0c;是域名与对应IP地址进行转换的系统&#xff0c;可将易于记忆的域名转换为可由服务器识别的用于互连通信的数字IP地址。随着大数据时代的到来&#xff0c;传统DNS所存在…

C语言~指针变量

给自己找的基础啊~~ 给自己学 多谢大佬指点 别的勿扰 指针变量的基本操作基本操作 int a,*iptr,*jptr,*kptr; iptr &a; jptr iptr; *jptr 100; kptr NULL; 己址和己空间 指针变量也是一个变量&#xff0c;对应一块内存空间&#xff0c;对应一个内存地址…

DJ8-2 主存储器的组织

如何由存储芯片到存储器&#xff1f; 确定设计容量&#xff1a;多大设计容量 芯片的选用&#xff1a;多大容量&#xff0c;位数&#xff0c;多少片&#xff0c;如何分组 地址分配&#xff1a;将CPU提供的全部地址空间的哪些地址空间分配给所设计的存储器&#xff0c;确定各芯…

docker搭建zabbix服务

docker搭建zabbix服务zabbix简介1、本次安装zabbix的镜像版本2、zabbix组件2.1 创建子网2.2 MySQL容器2.3 zabbix-server-mysql容器2.4 zabbix-web-nginx-mysql容器2.5 zabbix-agent2容器2.6 zabbix-snmptraps容器3、zabbix访问3.1 中文字体修改zabbix简介 zabbix&#xff08;…

esp32通过micropython-->MQTT--上传至腾讯云,实时显示温湿度数据保姆级教程(上)

esp32通过micropython-->MQTT--上传至腾讯云&#xff0c;实时显示温湿度数据保姆级教程&#xff08;上&#xff09;1.注册登录和创建产品&#xff1a;1.1注册账号/登录账号&#xff1a;1.2创建产品&#xff1a;1.注册登录和创建产品&#xff1a; 1.1注册账号/登录账号&…

销售人员应关注的 5 个指标

在上一篇博客 不想写代码&#xff0c;想要灵活性&#xff1f;这个指标平台全都有 中&#xff0c;我们提到了指标的分类一般分为基础指标、衍生指标和复合指标。其中基础指标可用于量化统计事务属性&#xff0c;如总金额等。而对于销售人员来说&#xff0c;最常接触/使用的指标是…

自动泊车的路径动态规划问题研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

【附源码】计算机毕业设计java支持协作知识建构的Python程序设计课程学习活动平台设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

iPhone通讯录如何完整导入到新手机

概要&#xff1a;iPhone通讯录如何完整导入到新手机&#xff1f;在此部分中&#xff0c;我们将示范几个从iPhone转移通讯录到另一台iPhone的选项。其中&#xff0c;第一种更为推荐&#xff0c;因为更灵活且更容易操作。当然您也可以根据自身情况选择喜欢的方法。 iPhone14已经发…

【HDLBits刷题笔记】12 More Circuits

Rule90 第一次见这东西有点莫名其妙,但是其实看懂了之后就是左移和右移相异或,注意这里使用的是逻辑右移,会自动补零,不能使用算数左移<<<。module top_module(input clk,input load,input [511:0] data,output reg[511:0] q ); always@(posedge clk)beginif(load…

QT调用OpenCV绘制直线、矩形、椭圆、圆、不规则曲线、文本

开发环境&#xff1a;QT5.14.2OpenCV4.5 提前准备&#xff1a;准备编译好的OpenCV开发环境(如自行编译的mingw版的opencv库&#xff0c;本地路径D:\opencv\qt_build64)&#xff0c;准备一张测试图片&#xff08;如&#xff1a;d:\test.jpg&#xff09;。 项目结构&#xff1a…

零零信安-DD数据泄露报警日报【第31期】

01 概述 2022.10.26共发现匿名网络资讯信息70,642条&#xff1b;最近7天共发现匿名网络资讯信息472,185条&#xff0c;同比增长-42%&#xff1b;最近30天共发现匿名网络资讯信息2,498,093 条。 D&D评论&#xff1a; 国际上&#xff0c;近日监测到国外公司源代码泄漏事件增加…

Web响应式(二)

内容:媒体查询 媒体查询语法 组合媒体查询一、媒体查询 媒体查询,可以根据设备的能力应用特定的CSS样式。比如,可以根据视口宽度、屏幕宽高比和朝向(水平还是垂直)等,只用几行CSS代码就改变内容的显示方式。 二、媒体查询语法 媒体查询类型大全媒体查询属性大全:例子: …

理解vim工作的几个关键字

理解vim工作的几个关键字 下面我们再来认识一下 vim ,理清下面的 vim 的几个名词,这样方便我们以后更好的去使用和进阶vim : 缓冲区(Buffer), 窗口 (Window ) , 标签(Tab) , 标记(Mark ), 寄存器(Register) , 插件(Plugin) , vim 脚本(VimScript)。 缓冲区(buffer) 什…

【LeetCode】移除元素、删除有序数组中的重复项、合并两个有序数组

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《LeetCode》 &#x1f516;题目链接&#xff1a;移除元素、删除有序数组中的重复项、合并两个有序数组 目录一、移除元素示例 1&#xff1a;示例 2&#xff1a;理解思路1&#xff1a;代码…

Linux——页面置换算法(OPT、FIFO、LRU的实现与比较)

目录 1、 实验题目 2、实验要求 &#xff08;1&#xff09;指令的地址按下述原则生成 &#xff08;2&#xff09;具体的实施方法 &#xff08;3&#xff09;将指令序列变换为页地址流 3、算法实现参考代码&#xff1a; 4、运行结果 5、算法比较 1、 实验题目 设计一个虚…

使用Git Bash Here代码上传本地项目到GitLab

使用Git Bash Here代码上传本地项目到GitLab,上传到到GitHub等其它项目管理也类似。 一、第一次用代码上传项目 1.使用Git Bash Here打开代码输入框&#xff0c;创建克隆目录&#xff1a; git clone xxx/androidprojects.git 2. 把项目放到创建的目录下&#xff0c;并代码进…