tkinter学习-文本框
阅读目录
- Entry 输入框
- Text 文本框
Entry:
说明:输入控件,用于显示简单的文本内容
属性:在输入框中用代码添加和删除内容,同样也是用insert()和delete()方法
from tkinter import *
root = Tk()
e = Entry(root)
e.pack(padx=10,pady=10) #x,y轴的边距为10
e.insert(1,'丘') #第一个参数是插入的位置,
e.insert(0,'山')
mainloop()
结果:
获取输入框里的内容,可以使用Entry组件的get()方法,通常是设置tkinter的变量(一般用StringVar)挂钩到textvatiable选项,然后再通过get()方法来获取
from tkinter import * root = Tk()
root.title('山丘')
root.geometry('300x160')
Label(root,text='账号:').place(x=30,y=30)
Label(root,text='密码:').place(x=30,y=70)
v1 = StringVar()
v2 = StringVar()
e1 = Entry(root,textvariable=v1)
e2 = Entry(root,textvariable=v2,show='*') #用*号代替用户输入的内容
e1.place(x=80,y=30)
e2.place(x=80,y=70)
def show():
print('账号:%s' % v1.get())
print('密码:%s' % v2.get())
e1.delete(0,END) #获取完信息,清楚掉输入框的
e2.delete(0,END) #0,END,表示从第0个到最后一个
Button(root,text='获取信息',width=10,command=show).place(x=20,y=120)
Button(root,text='退出',width=10,command=root.quit).place(x=180,y=120)
mainloop()
结果:
另外,Entry组件还支持验证输入的内容的合法性,例如输入框要求输入数字,用户输入的是字母那就是属于违法了,实现该功能,必须设置的validate,validatecommand,invalidcommand三个选项。
首先启用验证的开关是validate选项,该选项的值(常用的):
'focus':当Entry组件获得或失去焦点的时候
'focusin':当Entry组件获得焦点的时候
'focusout':当Entry组件失去焦点的时候
'key':当输入框被编辑的时候
其次是为validatecommand选项指定一个验证函数,该函数只能返回True或False表示验证结果,一般情况下验证函数只需要知道输入框的内容即可,
可以通过Entry组件的get()方法来获取这个字符串。
最后,invalidcommand选项指定的函数只有在validatecommand的返回值为False的时候才被调用。
from tkinter import *
root = Tk()
def test():
if e1.get() == '山丘':
print('正确')
return True
else:
print('错误')
return False
def test1():
print('又错了')
return True
v = StringVar()
e1=Entry(root,textvariable=v,validate='focusout',validatecommand=test,invalidcommand=test1)
e2 = Entry(root)
e1.pack(padx=10,pady=5)
e2.pack(padx=10,pady=5)
mainloop()
结果:
其实,还有一个隐藏的功能,为验证函数提供一些额外的选项(常用的):
‘%P’:改值为输入框的最新文本内容
为了使用这些选项,你可以这么写:validatecommand = (f,s1,s2,...)
其中,f 是验证函数名,s1,s2,是额外的选项,这些选项为作为参数依次的传给f 函数,在此之前,需要调用 register()方法将验证函数包装起来。
from tkinter import *
root = Tk()
root.title('山丘')
root.geometry('400x150')
v1 = StringVar()
v2 = StringVar()
v3 = StringVar()
def show(content):
#注意,这里你不能用e1.get()来获取输入的内容,因为validate选项指定为'key'
#这个时候有任何输入操作都会拦截到这个函数中,也就是说先拦截,只有这个函数
#返回的结果为True的时候,那么输入框的内容才会到变量里,所以要使用
#"%P"来获取最新的输入框的内容
if content.isdigit():
return True
else:
return False
show_com = root.register(show) e1 = Entry(root,textvariable=v1,width=10,validate='key',validatecommand=(show_com,'%P')).place(x=20,y=30)
Label(root,text='x').place(x=125,y=30)
e2 = Entry(root,textvariable=v2,width=10,validate='key',validatecommand=(show_com,'%P')).place(x=150,y=30)
Label(root,text='=').place(x=250,y=30)
e3 = Entry(root,textvariable=v3,width=10).place(x=280,y=30) def calc():
result = int(v1.get()) * int(v2.get())
v3.set(result)
Button(root,text='计算结果',width=10,command=calc).place(x=150,y=90)
mainloop()
结果:
Text:
说明:文本控件,用于显示多行文本
from tkinter import *
root = Tk()
text = Text(root,width=30,height=5)
text.pack()
text.insert(INSERT,'想得却不可得\n')#INSERT索引表示光标当前的位置
text.insert(END,'你奈人生何')
mainloop()
结果:
当然,也可以插入image对象,
from tkinter import *
root = Tk()
text = Text(root)
text.pack()
photo = PhotoImage(file='8.gif')
def show():
print('该舍却舍不得,只顾着跟往事瞎扯')
b1 = Button(text,text='唱吧',command=show).place(x=0,y=0) def show1():
text.image_create(END,image=photo)
b2 = Button(text,text='看吧',command=show1).place(x=0,y=35)
text.window_create(INSERT,window=b1)
text.window_create(END,window=b2)
mainloop()
结果:
Indexes用法:这个索引是用来指向组件中文本的位置,常用的索引类型:
'line.column':用行号和列号组成的,注意,行号用1开始,列号用0开始。
'line.end':行号加上‘.end’的格式表示该行的最后一个字符的位置
from tkinter import *
root = Tk()
text = Text(root,width=50,height=5)
text.pack()
text.insert(INSERT,'i love you')
print(text.get('1.2',1.6))
print(text.get(1.2,'1.end'))
mainloop()
结果:
Marks的用法:通常是嵌套在Text组件的文本中的不可见对象
用法:mark_set()方法创建,mark_unset()方法删除
from tkinter import *
root = Tk()
text = Text(root,width=20,height=5)
text.insert(INSERT,'i love you')
text.pack()
text.mark_set('here','1.2')
text.insert('here','山')
text.insert('here','丘')
mainloop()
结果:
只有mark_unset()方法可以解除,否则删除别的文本,Mark仍然在
from tkinter import *
root = Tk()
text = Text(root,width=20,height=5)
text.insert(INSERT,'i love you')
text.pack()
text.mark_set('hear','1.2')
text.insert('hear','小')
#text.mark_unset('hear')若要删除必须要用这个方法
text.delete('1.0',END)
text.insert('hear','大')
结果:
Tags:通常用于改变Text组件中的内容的样式和功能
tag_add():为指定的文本添加Tags
tag_config():可以设置Tags的样式
from tkinter import *
root = Tk()
text = Text(root,width=50,height=5)
text.pack()
text.insert(INSERT,'原来你是我最想留住的幸运')
text.tag_add('tag1','1.10','1.12')
text.tag_config('tag1',background='yellow',foreground='red')
mainloop()
结果:
Tags还支持事件绑定,用的是tag_bind()方法。
参看文献:
小甲鱼的python视频教程
tkinter学习-文本框的更多相关文章
- Python Tkinter Entry(文本框)
Python学习记录--关于Tkinter Entry(文本框)的选项.方法说明,以及一些示例. 属性(Options) background(bg) borderwidth(bd) cursor e ...
- Python2.7.3 Tkinter Entry(文本框) 说明
Python学习记录--关于Tkinter Entry(文本框)的选项.方法说明,以及一些示例. 属性(Options) background(bg) borderwidth(bd) cursor ...
- Tkinter--Text文本框样例
#-*- coding:utf-8 -*- """ Text 文本框样例 实现功能有:Ctrl+a全选文本, 竖向滚动条,横向滚动条(不自动换行) 自动缩放 有谁知道全选 ...
- java学习:AWT组件和事件处理的笔记(1)--文本框上的ActionEvent事件
学习处理事件时,必须很好的掌握事件源,监视器,处理事件的接口 1.事件源 能够产生java认可事件的对象都可称为事件源,也就是说事件源必须是对象 2.监视器 监 ...
- 给tkinter文本框添加右键菜单
给tkinter文本框添加右键菜单 需求:直接右键点击使用tkinter创建的文本框是不会弹出菜单的.我们需要实现右键点击tkinter框架下的Entry对象.Text对象后弹出右键菜单可复制.粘贴和 ...
- Flutter学习笔记(21)--TextField文本框组件和Card卡片组件
如需转载,请注明出处:Flutter学习笔记(21)--TextField文本框组件和Card卡片组件 今天来学习下TextField文本框组件和Card卡片组件. 只要是应用程序就少不了交互,基本上 ...
- tkinter基础-输入框、文本框
本节内容 了解输入框.文本框的使用方法 利用1制作简易界面 首先明确上面由几个元素组成:该界面由界面标题,输入框.两个按钮.文本框组成. 该界面我们需要实现的功能: 在输入框中输入文字,点击inser ...
- Python Tkinter 文本框(Entry)
Python Tkinter 文本框用来让用户输入一行文本字符串. 你如果需要输入多行文本,可以使用 Text 组件. 你如果需要显示一行或多行文本且不允许用户修改,你可以使用 Label 组件. 语 ...
- Tkinter 之Text文本框标签
一.参数说明 语法 作用 t=tk.Text()t.insert(END,'插入的文本信息') INSERT:光标的插入点CURRENT:鼠标的当前位置所对应的字符位置END:这个Textbuffer ...
随机推荐
- Libre OJ P2332「JOI 2017 Final」焚风现象【差分思想】By cellur925
题目传送门 这道题开始看起来会很晕...\(qwq\).首先我们要明确题目中的海拔&&温度.温度是受海拔影响的,每次改变的是海拔,我们求的是温度. 我们开始读入的时候便可以处理出开始\ ...
- vue 脚手架 图片预加载
$('.back-img').onload =function(){ var img =new Image(); img.src = '../assets/dt-bj.png'; } 该组件内的图片加 ...
- [coci2015-2016 coii] dijamant【图论】
传送门:http://www.hsin.hr/coci/archive/2015_2016/ 进去之后的最下面的国家赛.顺便说一句,dijamant是克罗地亚语的“钻石”的意思. 官方题解是说压位的暴 ...
- SDIO学习
https://baijiahao.baidu.com/s?id=1561100856106707&wfr=spider&for=pc http://www.eepw.com.cn/a ...
- C. Anton and Making Potions 贪心 + 二分
http://codeforces.com/contest/734/problem/C 因为有两种操作,那么可以这样考虑, 1.都不执行,就是开始的答案是n * x 2.先执行第一个操作,然后就会得到 ...
- Python相对导入导致SystemError的解决方案(译)
原文出处: http://stackoverflow.com/ 译文出处:yibohu1899 这个问题是如何解决在相对导入的时候,如果出现’System Error’的时候的解决方案.顺带一提, ...
- centos7安装iptables
使用CentOS 7时发现使用iptables防火墙时提示错误Unit iptables.service failed to load,意思是防火墙运行启动失败了,那么要如何处理呢. 一直用Cen ...
- ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第七天(非原创)
文章大纲 一.课程介绍二.Redis基础实战三.Redis之高可用.集群.云平台搭建实战四.淘淘商城Jedis整合spring五.项目源码与资料下载六.参考文章 一.课程介绍 一共14天课程(1) ...
- 学习笔记——Paint 1(MaskFilter)
对于Paint没有很好的深入的学习过,在工作之余再巩固巩固. 1.Paint的BlurMaskFilter(模糊效果) 自定义一个View继承View 重写里面的onDraw方法.这里直接上代码了: ...
- explian使用介绍
1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 2).select_type列常见的有:A:simple:表示 ...