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实现从ftp服务器下载文件的方法
Apr 30 Python
浅谈flask源码之请求过程
Jul 26 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
python cumsum函数的具体使用
Jul 29 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
Aug 12 Python
解决python3 安装不了PIL的问题
Aug 16 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
Keras 使用 Lambda层详解
Jun 10 Python
python中np是做什么的
Jul 21 Python
Python直接赋值及深浅拷贝原理详解
Sep 05 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
php 操作调试的方法
2012/07/12 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
页面中iframe相互传值传参
2009/12/13 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
Python出现segfault错误解决方法
2016/04/16 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
python多任务及返回值的处理方法
2019/01/22 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
Python reduce函数作用及实例解析
2020/05/08 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
北承题目(C++)
2012/05/16 面试题
酒鬼酒广告词
2014/03/21 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
环保证明
2015/06/23 职场文书
养成教育主题班会
2015/08/13 职场文书
节水宣传标语口号
2015/12/26 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
pycharm代码删除恢复的方法
2021/06/26 Python
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js