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

章节知识点总揽

4.4 TextInput输入框

        Kivy中的TextInput控件提供了可以编辑的纯文本框,支持Unicode编码、多行、光标导航、选择和剪切板等多种功能。

4.4.1 使用方法

        在.py内使用: 需要导入TextInput类,通过TextInput类生成一个文本框,并设置相关样式,再通过add_widget()方法添加到布局中即可,关键代码如下: 

from kivy.uix.textinput import TextInput        #引入控件
ti = TextInput(text='copy.com')                 #指定属性
self.add_widget(ti)                             #添加到布局

新建main.py文件,内容如下:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.textinput import TextInput

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

        ti = TextInput(text='copy.com')
        self.add_widget(ti)

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


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

        相比之下,在.kv文件中实现就非常简单,无需引入即可使用。关键代码如下: 

TextInput:                    #添加一个文本框
    text:'cocpy.com'          #显示的文本

4.4.2 常用属性

        在Kivy中,为了方便设置TextInput输入值的样式,Kivy提供了大量的属性,关于TextInput的常用属性及说明如下表所示:

TextInput常用属性

属性说明
text文本内容
text_lauguage文本语言,例如:zh_CN、en_US、fr和ja
halign文本的水平对齐方式,可设置为auto(默认)、left、center和right等属性
multiline是否显示多行文本,默认属性为True
allow_copy是否允许复制文本,默认属性为True
auto_indent自动缩进多行文字,默认属性为False
font_size文本的字体大小,以像素为单位,默认为15sp
foreground_color前景颜色,格式为rgba,默认属性为[0,0,0,1]
minimum_height文本框内容的最小高度
password是否用password_mask替换显示的密码,默认为False
password_mask在password为True时使用,默认以“*”替换显示的密码
readonly是否将文本框属性设置为只读,默认为False
background_color背景颜色,格式为rgba,默认为白色[1,1,1,1]
padding_x文本的水平填充,格式为[padding_left,padding_right]或[padding_horizontal],默认为[0,0]
padding_y文本的垂直填充,格式为[padding_top,padding_bottom]或[padding_vertical],默认为[0,0]
padding文本填充,格式为[padding_left,padding_top,padding_right,padding_bottom]或[padding_horizontal,padding_vertical]或[padding],默认属性为[6,6,6,6]
hint_text提示文本,默认为空字符串
hint_text_colorhint_text文本的当前颜色,格式为rgba,默认为灰色[0.5,0.5,.5,1]
input_filter过滤输入,默认为None
paste()插入剪切板的内容到当前光标位置
write_tab使用tab键将移至下一个小部件;否则将进入文本框,默认为True
background_active默认为“kivy\tools\theming\defaulttheme\textinput_active.png”属性
background_disabled_normal禁用TextInput时的背景图像,默认为“textinput_disabled.png”属性
background_normalTextInput不在焦点上时的背景图像,默认为“textinput.png”属性
handle_image_left在待处理的文本框左侧显示的图像,默认为“selector_left.png”属性
handle_image_middle在待处理的文本框中间显示的图像,默认为'selector_middle.png'属性
handle_image_right在待处理的文本框右侧显示的图像,默认为"selector_right"属性
replace_crlf用LF自动替换CRLF
select_all选中文本框显示的所有文本
selection_color所选内容的当前颜色,格式为rgba,默认为[0.1843,0.6549,0.8313,.5]
selection_from选择开始的光标索引,默认为None,为只读属性
selection_to选择结束的光标索引,默认为None,为只读属性
selection_text当前选择的内容,默认为空字符串,为只读属性
suggestion_text当前行的末尾显示建议文本
tab_width将tab替换为指定数量的空格,默认为4
select_text(start,end)选中文本框显示的部分文本
base_direction文本的基本方向,可设置为None(默认)、ltr、rtl、weak_ltr、weak_rtl(r即right,t即to,l即left)
border边框,默认属性为(4,4,4,4)
cancel_selection取消当前的选择
use_bubble是否使用剪切/复制/粘贴气泡,在0移动设备上默认为True;其他默认为False
use_handles是否显示选择指示,在移动设备上默认为True;其他默认为False
copy(data='')将提供的值复制到剪切板中
cursor当前光标位置
cursor_blink光标是否闪烁,默认为True
cursor_col光标的当前列,为只读属性
cursor_row光标的当前行,为只读属性
cursor_color光标的当前颜色,格式为rgba,默认属性为[1,0,0,1]
cursor_index(cursor=None)返回文本/值中的光标索引
cursor_offset()获取当前行上的光标偏移量
cursor_pos光标的当前位置,以(x,y)为单位 ,只读属性
cursor_width

光标的当前宽度,默认为“1sp”

cut()将当前选择剪切到前贴板
keyboard_suggestions在键盘上方是否提供建议输入,默认为True,设置input_type属性后才会生效
line_height计算一行文本的最小高度,为只读属性
line_spacing线条之间的空间,默认为0
on_double_tap()双击文本框触发该事件
on_triple_tap()三击文本框触发该事件
on_quad_touch()在文本框内部四指触摸事件
do_redo()重新执行do_undo/<Ctrl+z>取消的所有命令,快捷键为<Ctrl+R>
do_undo()进行撤销操作,快捷键为<Ctrl+Z>
reset_undo()从内存中重置撤销和重做列表
font_context字体中的上下文
font_family字体系列,仅在使用font_context选项时适用
scroll_x窗口的X方向滚动值,默认为0
scroll_y窗口的Y方向滚动值,默认为0
text_validate_unfocus停止监听键盘,默认为True
get_cursor_from_xy(x,y)从(x,y)位置返回光标的(行,列)
get_cursor_from_index(index)从文本索引返回光标的(行,列)
delete_selection(from_undo=False)删除当前选择的文本
disabled_foreground_color禁用时前景的颜色,格式为rgba,默认为[0,0,0,5]
do_backspace(from_undo=False,mode='bkspc')从当前位置执行删除操作
do_cursor_movement(action,control=False,alt=False)相对于当前位置移动光标
insert_text(substring,from_undo=False)在当前光标位置插入新文本
keyboard_on_key_down(window,keycode,text,modifiers)将焦点实时绑定到键盘,在每次输入时都会调用(类似于press)
keyboard_on_key_up(window,keycode)将焦点实时绑定到键盘,在每次什邡市都会调用(类似release)

        注意:所有和tab相关的属性,运行失败,尝试改为tap,不确定哪个是对的。下文代码中个别使用tap是正确的,但没有测试全部属性。

实例:设置TextInput输入框的常用属性

        新建一个用widget布局的main.py文件,用来加载.kv文件,具体代码如下:

from kivy.app import App
from kivy.uix.widget import Widget

class TextInputWidget(Widget):
    def  __init__(self,**kwargs):
        super().__init__(**kwargs)

class TextInputApp(App):
    def build(self):
        return TextInputWidget()

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

        根据main.py中TextInputApp()类,新建textinput.kv文件,首先设置布局为白色背景,再设置上表中的部分属性(文件中设置了不可复制、背景颜色、只读、居中等属性),具体内容如下: 

<TextInputWidget>:
	canvas:
		Color:
			rgba:[1,1,1,1]
		Rectangle:
			pos:self.pos
			size:self.size
	TextInput:
		text:'c0c,ink'
		multiline:False
		pos:400,380
		allow_copy:False

	TextInput:
		text:'cocpy.com'
		pos:100,180
		halign:'center'
		background_color:100,2,2,1

	TextInput:
		text:'first'
		pos:400,180
		readonly:True

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

91a2a7b8f0ba4cec9c1f97f12f4b1bab.png

 4.4.3 触发事件

        在使用TextInput输入框时,通常情况下需要使用以下几个触发事件:

                on_text_validate:选中,按<Enter>键的时候触发该事件

                on_text:文本改变的时候触发该事件

                on_double_tap:双击触发该事件

                on_trible_tap:三击触发该事件

                on_quad_touch:四指触摸时触发该事件

        实例:设置TextInput输入框的触发事件

        在上面实例的基础上,设置几个触发事件,具体代码如下:

        注意:这里为了观察,所以直接更改了位置,当然也可以在.py里添加相关方法,并在.kv文件内通过root.方法调用

        main.py文件不变

        textinput.kv文件内容如下: 

<TextInputWidget>:
	canvas:
		Color:
			rgba:[1,1,1,1]
		Rectangle:
			pos:self.pos
			size:self.size
	TextInput:
		text:'c0c,ink'
		multiline:False
		pos:400,380
		allow_copy:False
		on_text_validate:self.pos=[self.x,self.y-5]

	TextInput:
		text:'cocpy.com'
		pos:100,180
		halign:'center'
		background_color:100,2,2,1
		on_text:self.pos=[self.x+5,self.y]

	TextInput:
		text:'first'
		pos:400,180
		readonly:True
		on_double_tap:self.pos=[self.x-5,self.y]
		on_triple_tap:self.pos=[self.x,self.y+5]
		on_quad_touch:self.pos=[400,180]

        运行mian.py结果如下图:

e61e3f5514c24fd1b346e9880196b6a3.png

        讲一个实用的属性:scroll_y属性,可以实现文本行数过多后,自由向上滚动翻阅,同理,scroll_x属性可以实现左右自动滚动翻阅功能。

        其属性是一个整数,也可以时布尔值。在.py文件中用scroll_y=True或scroll_y=5,在.kv文件中则将'='用':'代替:scroll:True或scroll:5

测试例子:

from kivy.app import App
from kivy.uix.textinput import TextInput

class MyApp(App):
    def build(self):
        textinput = TextInput(text="This is a multiline\nTextInput widget.",
                                multiline=True,
                                scroll_y=5)
        return textinput

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

 

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

下一篇:简单UX部件——CheckBox复选框

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

静候光阴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值