python tkinter Entry控件的焦点移动操作


Posted in Python onMay 22, 2021

话不多说。

代码片:

# -*- coding: utf8 -*-
from tkinter import *
#####################################
###--------------tk----------------
class App:
    def __init__(self,master):
        frame = Frame(master)
        frame.pack(expand=1)
        self.e1 = Entry(frame) 
        self.e1.pack()   
        self.e2 = Entry(frame) 
        self.e2.pack()   
        
        self.e1.bind("<Return>",handlerAdaptor(focus_cg,e2=self.e2))#tk类不能直接传递参数,需要lambda
def focus_cg(event,e2):
   e2.focus_set() #焦点移到e2
def handlerAdaptor(fun, **kwds):
#事件处理函数的适配器,相当于中介,那个event是从那里来的呢,我也纳闷,这也许就是python的伟大之处吧
    return lambda event,fun=fun,kwds=kwds: fun(event, **kwds)
 
if __name__ == '__main__':
    root = Tk()
    app=App(root)
    root.mainloop()

Tkinter 事件绑定的,参数不能直接传递。全局变量可以使用。

不使用全局变量的方法:

self.btn = Button(frame,text=u'OK', command=lambda : handler(v=123))

事件绑定型:

self.e1.bind("<Return>",handlerAdaptor(focus_cg,e2=self.e2))#tk类不能直接传递参数,需要lambda
def focus_cg(event,e2):
   e2.focus_set() #焦点移到e2
def handlerAdaptor(fun, **kwds):
#事件处理函数的适配器,相当于中介,那个event是从那里来的呢,我也纳闷,这也许就是python的伟大之处吧
    return lambda event,fun=fun,kwds=kwds: fun(event, **kwds)

补充:Python之tkinter 文本框Entry的基本应用

Entry简介

所谓的文本框Entry,通常是指单行的文本框,在GUI程序设计中,这是用于输入的最基本控件,我们可以使用它输入单行字符串,如果所输入的字符串长度大于文本框的宽度,所输入的文字会自动隐藏,造成部分内容无法显示,碰到这种状况时可以使用箭头键移动鼠标光标到看不到的区域。

文本框限定的是单行文字,如果想要处理多行文字,需要使用控件中的text

它的语法格式:

Entry(父对象, options, ...)

第一个参数:父对象,表示这个文本框将建立在哪一个窗口内

第二个参数:options,参数如下

参数 含义
borderwidth 边界宽度 默认是两个像素
bd 边界宽度 默认是两个像素
background 背景色彩
bg 背景色彩
command 当用户更改内容时,会自动执行此函数
cursor 当鼠标光标移至按钮上时的形状
exportselection 如果执行选取时,所选取的字符串会自动输出至剪贴板 如果想要避免,可以设置exportselection=0
foreground 前景色彩
fg 前景色彩
font 字形
height 高,单位是字符高
highlightbackground 当功能按钮获取焦点时的背景颜色
highlightcolor 当工人按钮取得焦点时的颜色
justify 当有多行文字时,最后一行文字的对齐方式
relief 可由此控制文字外框 默认是relief=FLAT
selectbackground 被选取字符串的背景色彩
selectborderwidth 选取字符串时的边界宽度 预设是1
selectfroeground 被选取字符串的前景色彩
show 显示输入字符 例如,show='*'表示显示星号,常用于输入密码字段
state 输入状态 默认是NORMAL表示可以输入,DISABLE则表示无法输入
textvariable 文字变量
width 宽,单位是字符宽
xscrollcommand 在X轴使用滚动条

Entry的基本应用

例子:建立标签和文本框,输入姓名和地址

import tkinter
root = tkinter.Tk()
label1 = tkinter.Label(root, text="姓名 :")
label2 = tkinter.Label(root, text="住址 :")
label1.grid(row=0)
label2.grid(row=1)
entry1 = tkinter.Entry(root)
entry2 = tkinter.Entry(root)
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)
root.mainloop()

运行结果:

python tkinter Entry控件的焦点移动操作

设置grid(row=0),在没有设置column=x的情况下,系统自动设置column=0

使用show 参数隐藏输入的字符

其实Entry控件具有可以使用show参数设置隐藏输入字符的特性,所以也常被应用在用于输入密码的时候

例子:密码的输入,用*隐藏

import tkinter
root = tkinter.Tk()
label1 = tkinter.Label(root, text="账号 :")
label2 = tkinter.Label(root, text="密码 :")
label1.grid(row=0)
label2.grid(row=1)
entry1 = tkinter.Entry(root)
entry2 = tkinter.Entry(root, show="*")
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)
root.mainloop()

运行结果:

python tkinter Entry控件的焦点移动操作

Entry 的 get 方法

Entry 有一个get()方法,可以利用这个方法来获取目前Entry 的字符串内容

import tkinter
def getValue():
    print("账号为{}, 密码为{}".format(entry1.get(), entry2.get()))
root = tkinter.Tk()
label1 = tkinter.Label(root, text="账号 :")
label2 = tkinter.Label(root, text="密码 :")
label1.grid(row=0)
label2.grid(row=1)
entry1 = tkinter.Entry(root)
entry2 = tkinter.Entry(root, show="*")
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)
buttonLogin = tkinter.Button(root, text="登录", command=getValue)
buttonExit = tkinter.Button(root, text="退出", command=root.quit)
buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20)
buttonExit.grid(row=2, column=1)
root.mainloop()

运行结果:

python tkinter Entry控件的焦点移动操作

我们输入账号密码,点击登录

账号为123456, 密码为132456

控制台就出现了我们所需要的的信息

Entry 的 insert() 方法

在设计GUI程序时,常常需要在建立Entry的文本框内默认建立输入文字,在Widget控件中可以使用insert(index, s)方法插入字符串

其中s是所插入的字符串,字符串会插在index位置

例子:建立默认文字内容

import tkinter
def getValue():
    print("账号为{}, 密码为{}".format(entry1.get(), entry2.get()))
root = tkinter.Tk()
label1 = tkinter.Label(root, text="账号 :")
label2 = tkinter.Label(root, text="密码 :")
label1.grid(row=0)
label2.grid(row=1)
entry1 = tkinter.Entry(root)
entry2 = tkinter.Entry(root, show="*")
# 默认账号内容
entry1.insert(0, "123456")
# 默认密码内容
entry2.insert(0, "123456")
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)
buttonLogin = tkinter.Button(root, text="登录", command=getValue)
buttonExit = tkinter.Button(root, text="退出", command=root.quit)
buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20)
buttonExit.grid(row=2, column=1)
root.mainloop()

运行结果:

python tkinter Entry控件的焦点移动操作

Entry 的 delete() 方法

在tkinter模块的应用中可以使用delete(first, last=None)方法删除Entry内的从第first字符到last-1字符间的字符串,如果要删除整个字符串可以使用delete(0, END)

如果删除倒数第一个,我们可以用len()方法判断长度,然后长度减一就行

例子:单击删除按钮清空文本框内容

import tkinter
def getValue():
    print("账号为{}, 密码为{}".format(entry1.get(), entry2.get()))
# 删除的方法
def deleteValue():
    entry1.delete(0, tkinter.END)
    entry2.delete(0, tkinter.END)
root = tkinter.Tk()
label1 = tkinter.Label(root, text="账号 :")
label2 = tkinter.Label(root, text="密码 :")
label1.grid(row=0)
label2.grid(row=1)
entry1 = tkinter.Entry(root)
entry2 = tkinter.Entry(root, show="*")
# 默认账号内容
entry1.insert(0, "123456")
# 默认密码内容
entry2.insert(0, "123456")
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)
buttonLogin = tkinter.Button(root, text="登录", command=getValue)
# 调用删除的方法
buttonExit = tkinter.Button(root, text="删除", command=deleteValue)
buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20)
buttonExit.grid(row=2, column=1)
root.mainloop()

运行结果:

python tkinter Entry控件的焦点移动操作

例子:删除最后一个

def deleteValue():
    len_entry = len(entry1.get())
    entry1.delete(len_entry - 1)
    entry2.delete(0, tkinter.END)

运行结果:

python tkinter Entry控件的焦点移动操作

如果只有一个参数的话,那这个参数将是first,如不是last,len_entry - 1相当于是从到底第一个开始删除,一直到末尾

计算数学表达式使用 eval()

Python有一个非常好用的计算数学表达式的函数eval

该函数可以直接传回此数学表达式的计算结果,它的语法格式:

"""expression为字符串"""
result = eval(expression)

例子:

import tkinter
def getValue():
    try:
        value = eval(entry.get())
        label2.configure(text="计算结果为:" + str(value))
    except:
        pass
root = tkinter.Tk()
label = tkinter.Label(root, text="请输入数学表达式:")
label.pack(anchor=tkinter.W)
entry = tkinter.Entry(root)
entry.pack(pady=5)
label2 = tkinter.Label(root)
label2.pack()
button = tkinter.Button(root, text="计算", command=getValue)
button.pack(pady=5)
root.mainloop()

运行结果:

python tkinter Entry控件的焦点移动操作

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 调用DLL操作抄表机
Jan 12 Python
用Python创建声明性迷你语言的教程
Apr 13 Python
在Python中使用第三方模块的教程
Apr 27 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
python获取服务器响应cookie的实例
Dec 28 Python
Python实现微信机器人的方法
Sep 06 Python
Transpose 数组行列转置的限制方式
Feb 11 Python
django下创建多个app并设置urls方法
Aug 02 Python
Scrapy 配置动态代理IP的实现
Sep 28 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
pyqt5蒙版遮罩mask,setmask的使用
Jun 11 Python
python3.7.2 tkinter entry框限定输入数字的操作
May 22 #Python
tensorboard 可视化之localhost:6006不显示的解决方案
pytorch训练神经网络爆内存的解决方案
粗暴解决CUDA out of memory的问题
May 22 #Python
pytorch中的model.eval()和BN层的使用
May 22 #Python
解决Pytorch中关于model.eval的问题
Pytorch 中net.train 和 net.eval的使用说明
May 22 #Python
You might like
网络资源
2006/10/09 PHP
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
PHP准确取得服务器IP地址的方法
2015/06/02 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
如何能分清npm cnpm npx nvm
2019/01/17 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
python发送邮件接收邮件示例分享
2014/01/21 Python
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
2020/03/17 HTML / CSS
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
大学生学业生涯规划
2014/01/05 职场文书
个人贷款承诺书
2014/03/28 职场文书
幼儿园运动会口号
2014/06/07 职场文书
英语教师求职信
2014/06/16 职场文书
初级党校心得体会
2014/09/11 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
vue使用echarts实现折线图
2022/03/21 Vue.js